0

问题:

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

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

ref.SomeStaticMethod()对于每条路径,在节点中调用它们的静态方法?

注意:我正在为节点(如果重要的话)和 windows 10 使用打字稿。


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)
4

1 回答 1

0

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

考虑到路径已被 glob 成功匹配,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);
    ...
于 2018-08-11T17:11:09.530 回答