打字稿-正面-我想合并静态导入,但不要合并动态导入

时间:2018-09-23 01:54:56

标签: typescript dynamic import static es6-modules

我想合并一些文件(带有静态导入的文件),但不必合并某些文件(带有动态导入的文件)。

我该如何告诉打字稿?

该演示由4个文件,一个具有main()函数的索引以及3个类A,B和C组成。

当前的打字稿配置:

{
  "compilerOptions": {
    "allowJs": true,
    "target": "es2017",
    "module": "esnext",
    "outDir": "lib",
    "sourceMap": false,
    "strict": true,
    "noImplicitAny": false,
    "removeComments": true,
    "lib": [
      "esnext"
    ],
  },
  "compileOnSave": true,
  "include": [
    "src/**/*.ts",
    "src/**/*.js"
  ],
  "exclude": [
    "node_modules",
    "old"
  ]
}

src / index.ts

'use strict';
//@ts-check

import { C } from './c/c'; // I want this one to be merged in index

export const main = async () => {
  const c = new C();
  c.log();
}

main();

src / c.ts

'use strict';
//@ts-check

import { B } from '../b/b'; // I want this one to be merged in c, so in index

export class C {

  async log() {
    const A = await import('/' + 'a.js');
    const a = new A();
    a.log();
    const b = new B();
    b.log();
  }
}

src / b.ts

'use strict';
//@ts-check

export class B {

  async log() {
    console.log('b');
  }
}

src / a.ts

'use strict';
//@ts-check

export class A {

  log() {
    console.log('a');
  }
}

目前我知道了:

- lib/a/a.js
- lib/b/b.js
- lib/c/c.js
- lib/index.js

但是我想要:

- lib/a.js // Apart from index, because it is dynamically imported
- lib/index.js

有什么想法吗?

是否有装饰器告诉打字稿将c和b合并到索引中,然后放在索引旁?

我想不必添加任何构建层(例如webpack),而只使用打字稿。

1 个答案:

答案 0 :(得分:0)

我很确定仅使用TypeScript编译器就无法做到这一点。 (您可以使用项目引用和outFile手动合并文件组,但是仍然需要AMD或SystemJS模块运行时。)您将需要使用单独的工具,例如Webpack。 IMO确实如此,但重要的是TypeScript团队的意见。