Typescript 文件停止转译 post Angular 9 使用 esnext 模块升级
Typescript file stopped getting transpiled post Angular 9 upgrade with esnext module
我在项目的根位置有一个打字稿文件 (git-version.ts),它在 Jenkins CI 管道中用于读取最新的 commit/revision 触发了 CI 构建(它使用 ts-node 来 运行 这个 ts 文件)。下面是我的项目结构的一瞥:
root
|_src/
|_angular.json
|_git-version.ts
|_package.json
|_tsconfig.json
以前它在 Angular 7 上工作得很好,但似乎在 Angular 9 的默认 esnext 模块加载器上坏了。当我将我的模块更改为 'commonjs' 时当前 angular 9 tsconfig 设置,它工作得很好。但是,我失去了差异加载功能的优势,因为 commnjs 倾向于为我的整个应用程序创建一个包。所以,我不得不切换回 'esnext'。以下是我当前的 tsconfig.json 设置:
{
"compileOnSave": false,
"compilerOptions": {
"downlevelIteration": true,
"importHelpers": true,
"module": "esnext",
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2015",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
]
},
"angularCompilerOptions": {
"enableIvy": true
}
}
我也试过把说的ts文件的扩展名改成js,但是又开始抛异常,"SyntaxError: Cannot use import statement outside a module"。显然,我需要一种方法来使用 'commonjs' 加载此 ts 文件,并且仍然对整个应用程序的其余部分使用 'esnext'。
由于有问题的文件在您的 src 文件夹之外,并且如您所提到的,它与 commonjs 一起工作正常,很可能是 typescript 导入问题。
如果您愿意使用 ts-node 加载打字稿文件,您可以为特定文件定义不同的加载器。像这样:
ts-node -O '{\"module\": \"commonjs\"}' git.version.ts
您可以将其添加为 npm 脚本并在 Jenkinsfile 中用于您的 CI 管道。
我在项目的根位置有一个打字稿文件 (git-version.ts),它在 Jenkins CI 管道中用于读取最新的 commit/revision 触发了 CI 构建(它使用 ts-node 来 运行 这个 ts 文件)。下面是我的项目结构的一瞥:
root
|_src/
|_angular.json
|_git-version.ts
|_package.json
|_tsconfig.json
以前它在 Angular 7 上工作得很好,但似乎在 Angular 9 的默认 esnext 模块加载器上坏了。当我将我的模块更改为 'commonjs' 时当前 angular 9 tsconfig 设置,它工作得很好。但是,我失去了差异加载功能的优势,因为 commnjs 倾向于为我的整个应用程序创建一个包。所以,我不得不切换回 'esnext'。以下是我当前的 tsconfig.json 设置:
{
"compileOnSave": false,
"compilerOptions": {
"downlevelIteration": true,
"importHelpers": true,
"module": "esnext",
"outDir": "./dist/out-tsc",
"baseUrl": "src",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2015",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2016",
"dom"
]
},
"angularCompilerOptions": {
"enableIvy": true
}
}
我也试过把说的ts文件的扩展名改成js,但是又开始抛异常,"SyntaxError: Cannot use import statement outside a module"。显然,我需要一种方法来使用 'commonjs' 加载此 ts 文件,并且仍然对整个应用程序的其余部分使用 'esnext'。
由于有问题的文件在您的 src 文件夹之外,并且如您所提到的,它与 commonjs 一起工作正常,很可能是 typescript 导入问题。
如果您愿意使用 ts-node 加载打字稿文件,您可以为特定文件定义不同的加载器。像这样:
ts-node -O '{\"module\": \"commonjs\"}' git.version.ts
您可以将其添加为 npm 脚本并在 Jenkinsfile 中用于您的 CI 管道。