![](/img/trans.png)
[英]TypeScript error "TS2354: This syntax requires an imported helper but module 'tslib' cannot be found"
[英]"This syntax requires an imported helper but module 'tslib' cannot be found" with ES2015 modules
我有一个演示项目,我将要编译为 ES5,启用 ES2015 模块并将tslib
用于外部 TS 助手:
包.json
{
"name": "foo",
"scripts": {
"build": "tsc"
},
"dependencies": {
"tslib": "^1.9.3"
},
"devDependencies": {
"typescript": "^3.1.3"
}
}
tsconfig.json文件
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"outDir": "./lib",
"rootDir": "./src",
"importHelpers": true,
"strict": true,
"experimentalDecorators": true
}
}
源代码/index.ts
function a(target: any) {
return target;
}
@a
export class Foo {}
这会导致错误:
src/index.ts:5:1 - 错误 TS2354:此语法需要导入的帮助程序,但找不到模块“tslib”。
当lib/index.js
被正确编译时:
import * as tslib_1 from "tslib";
function a(target) {
return target;
}
var Foo = /** @class */ (function () {
function Foo() {
}
Foo = tslib_1.__decorate([
a
], Foo);
return Foo;
}());
export { Foo };
如何解决这个问题?
尝试类似:
npm install tslib --save-dev
或者,修复菜鸟错误(我刚刚犯的):
npm i
我的意思是,在周五签字之前,我个人做了一个git clean -fxd
,但没有npm i
,所以所有的 npm 包都丢失了。 多哈
将以下行添加到tsconfig.json
"compilerOptions": {
//...rest parameters
"baseUrl": "./",
"paths": {
"tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
},
刚刚将 tslib 更新到最新版本,问题已经解决。 我已经安装了1.9.3
,并更新到1.10.0
。
如参考所述,模块分辨率仅针对"modules": "commonjs"
设置为节点模式,并为 " "modules": "es2015"
": "es2015" 设置为经典模式:
有两种可能的模块解析策略:Node 和 Classic。 您可以使用 --moduleResolution 标志来指定模块解析策略。 如果未指定,则默认为 Classic for --module AMD | 系统 | ES2015 或 Node 其他
由于经典模式不知道node_modules
,编译器无法解析tslib
模块。
moduleResolution
应该为 ES2015 模块显式设置:
...
"module": "es2015",
"moduleResolution": "node",
...
我的错误似乎是零星的,但可能是由编辑“node_modules”文件夹中的文件引起的。
我删除了
然...“npm安装”
它现在正在工作。
注意:我尝试在删除文件之前运行“npm install”,但这并没有解决问题。
就我而言,已经安装了 tslib,我只看到 1 个组件出现此错误,而其他一切工作正常 - 构建和功能。 我刚刚重新启动了我的 vscode,它就消失了。 因此,请尝试在您完成其他人建议的操作后错误仍然存在。
更新package.json中tslib的依赖和devDependencies
{
dependencies:{
"tslib": "1.10.0",
},
devDependencies:{
"tslib": "1.10.0",
}
}
在我的情况下,错误Cannot find module 'tslib'
是由我的 Angular 存储库中的特殊构建器@nrwl/node:build
引起的(我正在使用带有 NodeJS 服务器的nrwl/nx monorepo 模式作为应用程序之一)。
它没有在编译 output 中包含tslib
。 在angular.json
的生产构建配置中设置"externalDependencies": "none"
解决了该问题。 归功于@vincastl: https://github.com/nrwl/nx/issues/2625
在这里发布它,因为这是我发现尝试解决此问题的第一篇文章,也许我并不孤单。
npm i -g tslib
这解决了我的问题。 没有 -g 它对我不起作用。
npm安装
如果您在第一次打开新项目或存储库时看到此错误,则可能只是尚未安装应用程序所需的模块。
在应用程序的目录中,运行:
npm install
在我的情况下,删除importHelpers
编译器选项或将其设置为false
解决了这个问题。
{
"compilerOptions": {
...
"importHelpers": false, // Or remove this
...
}
}
在您的项目中,只需运行
npm i tslib
它包含所有 typescript 辅助函数
在你的项目中执行: npm install --force
升级 tslib 版本 2.00.0
在 package.json 它应该是 "tslib": "^2.0.0"
我有一个案例,唯一的解决方法是在package.json
中手动添加:
"tslib": "^2.3.1",
然后运行npm i
。
我用jest
(+vuejs 和 monorepo 结构)遇到了这个问题。 所有应用程序都运行良好,但单元测试。
因此,必须做两件事才能使它们起作用:
tsconfig.json
中: "compilerOptions": {
"paths": {
"tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
}
jest.config.js
中: moduleNameMapper: {
'tslib': '<rootDir>/path/to/node_modules/tslib/tslib.js'
}
我遇到了同样的问题,使用以下命令解决了!
npm install -D tslib@latest
你必须从"compilerOptions": { "importHelpers": true, }
中删除 tsconfig.json
在<PropertyGroup>
内的 your.csproj 文件中添加以下行:
<TypeScriptCompileBlocked>True</TypeScriptCompileBlocked>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.