![](/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.