我正在尝试使用webpack对应用程序进行代码拆分,但是webpack并未为我的动态导入创建代码块。我在这里找到一个来源: https://davidea.st/articles/webpack-typescript-code-split-wont-work 这表示我需要将tsconfig文件中的模块属性从“ commonjs”更改为“ esnext”,以便打字稿编译器不会将我的动态导入语句简化为Promises,导致Webpack不知道它们是动态导入,因此无法创建动态大块。我遵循了这一点,在编译过程中,我可以看到正在创建的块! !!但是,当尝试在我的Express应用程序中解析import语句时,编译器会出错,出现问题标题,因为这些ES导入不再被节点理解了。有谁知道这是否有可能实现?我想在节点中使用ES导入语句,但没有在tsconfig文件中将模块属性设置为“ commonjs”。我真的不想将所有import语句重构为commonJS require语句。
tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "esnext",
"allowJs": true,
"sourceMap": false,
"inlineSourceMap": true,
"strict": true,
"strictNullChecks": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noEmitOnError": true,
"removeComments": false,
"forceConsistentCasingInFileNames": true,
"suppressImplicitAnyIndexErrors": false,
"jsx": "react",
"watch": false,
"moduleResolution": "node"
}}
节点版本:v8.11.3
我在npm脚本中使用ts-node执行服务器代码:
“开始”:“ webpack && ts-node-./src/service/index.ts --env = prod”
我的.babelrc如下所示:
{
"presets": [
"react",
"stage-3",
[
"env",
{
"modules": false
}
]
],
"plugins": [
"react-hot-loader/babel",
"syntax-dynamic-import"
]
}
答案 0 :(得分:1)
默认情况下,ts-node
使用工作目录中tsconfig.json
文件中的编译器选项;您可以使用tsconfig.json
选项指定其他--project
文件。与tsconfig.json
一起使用的ts-node
文件必须将module
设置为commonjs
(或省略,在这种情况下,ts-node
将其默认设置为commonjs
)为了即时编译生成Node可以理解的模块。对于使用tsconfig.json
运行的服务器代码和使用Webpack打包的客户端代码,您可能需要使用单独的ts-node
文件。