代码之家  ›  专栏  ›  技术社区  ›  Armeen Moon

从节点脚本中的路径列表调用类的静态方法?

  •  0
  • Armeen Moon  · 技术社区  · 7 年前

    如何获取文件路径列表 Array<string> :

    // ['apps/morningharwood/src/app/app.component.ts',
    //  'apps/morningharwood/src/app/app-shell/app-shell.component.ts']
    

    ref.SomeStaticMethod() 在节点中?

    注意:我正在为node(如果重要的话)和windows 10使用typescript。


    async function prePublish() {
    
      const componentPaths = await globby('apps/morningharwood/src/app/**/*.component.ts');
      const dirPaths = componentPaths.map(i => `./${i.split('.ts')[ 0 ]}`);
      console.log(dirPaths);
      /**
       * Logs out this
       * [ './apps/morningharwood/src/app/app.component',
       *   './apps/morningharwood/src/app/app-shell/app-shell.component' ]
       */
      const ref = await import('./apps/morningharwood/src/app/app.component');
      const ref2 = await import('./apps/morningharwood/src/app/app-shell/app-shell.component');
      console.log(ref, ref2); // WORKS AS INTENDED
    
      for (const dp of dirPaths) {
        console.log(dp); // ./apps/morningharwood/src/app/app.component
        const ref3 = await import(dp); // ERROR?
    
        console.log(ref); // Never runs.
      }
    }
    prepublish();
    

    完全错误堆栈跟踪:

    ./apps/morningharwood/src/app/app.component
    Unhandled Promise rejection: Cannot find module './apps/morningharwood/src/app/app.component' ; Zone: <root> ; Task: Promise.then ; Value: { Error: Cannot find module './apps/morningharwood/src/app/app.component'
        at webpackEmptyContext (webpack:///._sync?:2:10)
        at eval (webpack:///./prerender.ts?:126:126)
        at ZoneDelegate.invoke (webpack:///./node_modules/zone.js/dist/zone-node.js?:387:26)
        at Zone.run (webpack:///./node_modules/zone.js/dist/zone-node.js?:137:43)
        at eval (webpack:///./node_modules/zone.js/dist/zone-node.js?:871:34)
        at ZoneDelegate.invokeTask (webpack:///./node_modules/zone.js/dist/zone-node.js?:420:31)
        at Zone.runTask (webpack:///./node_modules/zone.js/dist/zone-node.js?:187:47)
        at drainMicroTaskQueue (webpack:///./node_modules/zone.js/dist/zone-node.js?:594:35)
        at ZoneTask.invokeTask (webpack:///./node_modules/zone.js/dist/zone-node.js?:499:21)
        at ZoneTask.invoke (webpack:///./node_modules/zone.js/dist/zone-node.js?:484:48) code: 'MODULE_NOT_FOUND' } Error: Cannot find module './apps/morningharwood/src/app/app.component'
        at webpackEmptyContext (webpack:///._sync?:2:10)
        at eval (webpack:///./prerender.ts?:126:126)
        at ZoneDelegate.invoke (webpack:///./node_modules/zone.js/dist/zone-node.js?:387:26)
        at Zone.run (webpack:///./node_modules/zone.js/dist/zone-node.js?:137:43)
        at eval (webpack:///./node_modules/zone.js/dist/zone-node.js?:871:34)
        at ZoneDelegate.invokeTask (webpack:///./node_modules/zone.js/dist/zone-node.js?:420:31)
        at Zone.runTask (webpack:///./node_modules/zone.js/dist/zone-node.js?:187:47)
        at drainMicroTaskQueue (webpack:///./node_modules/zone.js/dist/zone-node.js?:594:35)
        at ZoneTask.invokeTask (webpack:///./node_modules/zone.js/dist/zone-node.js?:499:21)
        at ZoneTask.invoke (webpack:///./node_modules/zone.js/dist/zone-node.js?:484:48)
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Estus Flask    7 年前

    模块路径相对于当前模块进行解析,文件系统路径相对于当前工作目录进行解析。

    考虑到一条路径被一个球成功匹配, apps/...

    它可以是:

      const componentPaths = await globby('../apps/morningharwood/src/app/**/*.component.ts', { cwd: __dirname });
      for (const path of componentPaths) {
        const ref = await import(path.join('./', path));
        ...
    

    或:

      const componentPaths = await globby(path.join(__dirname, '../apps/morningharwood/src/app/**/*.component.ts'));
      for (const path of componentPaths) {
        const ref = await import(path);
        ...
    
    推荐文章