簡體   English   中英

使用 ES2015 模塊時出現“此語法需要導入的幫助程序,但找不到模塊‘tslib’”

[英]"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 包都丟失了。 多哈

我的問題是編輯器使用的 TypeScript 版本與項目不同。

要解決這個問題:

  1. 打開命令面板(Mac 上的 Cmd+Shift+P。焦點文件必須是 .ts 或 .tsx 否則不會顯示更改版本的選項)
  2. Select “打字稿:Select TypeScript 版本...”
  3. 它顯示了 VSCode 的 TS 版本和 Workspace 的(項目)一個,選擇那個

或者單擊底部欄中的版本號(如果它顯示在其中):

將以下行添加到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”文件夾中的文件引起的。

我刪除了

  • “node_modules”文件夾
  • “package-lock.json”文件

然...“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 結構)遇到了這個問題。 所有應用程序都運行良好,但單元測試。

因此,必須做兩件事才能使它們起作用:

  1. tsconfig.json中:
    "compilerOptions": {
      "paths": {
        "tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
    }
  1. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM