"此语法需要导入的帮助程序,但无法使用ES2015模块找到模块'tslib'

Est*_*ask 27 typescript

我有演示项目我即将编译到ES5,启用ES2015模块并tslib用于外部TS助手:

的package.json

{
  "name": "foo",
  "scripts": {
    "build": "tsc"
  },
  "dependencies": {
    "tslib": "^1.9.3"
  },
  "devDependencies": {
    "typescript": "^3.1.3"
  }
}
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "module": "es2015",
    "outDir": "./lib",
    "rootDir": "./src",
    "importHelpers": true,
    "strict": true,
    "experimentalDecorators": true
  }
}
Run Code Online (Sandbox Code Playgroud)

SRC/index.ts

function a(target: any) {
    return target;
}

@a
export class Foo {}
Run Code Online (Sandbox Code Playgroud)

这会导致错误:

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 };
Run Code Online (Sandbox Code Playgroud)

怎样才能解决这个问题?

Pau*_*ood 45

Noob错误(我刚才做的).尝试:

npm install tslib
Run Code Online (Sandbox Code Playgroud)

要么

npm i
Run Code Online (Sandbox Code Playgroud)

个人在周五签约之前我做了一个git clean -fxd,但没有npm i这样所有的npm包丢失了.卫生署!

  • 我永远不会知道为什么这不包含在 _many_ 角度依赖项之一中:( (3认同)
  • “ tslib本身不是与angular的依赖关系。当启用TypeScript importHelpers时,而是TypeScript编译器的依赖关系。任何使用importHelpers编译的库都应始终直接依赖于tslib,而不要依赖于其他库来安装它。” https://github.com/angular/angular-cli/issues/13886#issuecomment-471927518 (3认同)
  • @Aravin,这就是为什么你不运行在互联网上看到的任何命令的原因 (3认同)

for*_*nee 32

就我而言,删除或设置importHelpers编译器选项即可false解决该问题。

{
  "compilerOptions": {
    ...
    "importHelpers": false, // Or remove this
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 23

就我而言,tslib 已经安装,我只在 1 个组件上看到此错误,而其他一切都工作正常 - 构建和功能。我刚刚重新启动我的 vscode,它就消失了。因此,如果在完成其他人建议的操作后错误仍然存​​在,请尝试一下。

  • 是的,遇到了同样的问题,重新启动 VSCode 为我解决了这个问题。:) (2认同)

zok*_*zok 20

我的问题是编辑器使用的 TypeScript 版本与项目不同。

要解决这个问题:

  1. 打开命令面板(Mac 上为 Cmd+Shift+P。焦点文件必须是 .ts 或 .tsx,否则不会显示更改版本的选项)
  2. 选择“打字稿:选择打字稿版本...”
  3. 它显示了 VSCode 的 TS 版本和 Workspace 的(项目)一个,选择那个

或者单击底部栏中的版本号,如果它显示在那里:

  • 更新到 Ng12 后,已经安装了 tslib 并收到“此语法需要导入的帮助程序,但找不到模块“tslib”。”错误,这个简单的解决方案就是我所需要的。PS,答案有点含糊,所以为了澄清你必须选择:“工作空间(项目)” (13认同)
  • 这不应该是公认的答案,因为 OP 没有提到他们正在使用 VSCode。 (4认同)
  • 这对我有用,但我必须另外使用“TypeScript:重新加载项目”命令。 (3认同)

小智 19

将下面的行添加到 tsconfig.json

"compilerOptions": {
    //...rest parameters

    "baseUrl": "./",
    "paths": {
      "tslib" : ["path/to/node_modules/tslib/tslib.d.ts"]
    },
Run Code Online (Sandbox Code Playgroud)


Pav*_*vel 9

刚刚将tslib更新到最新版本,并且问题已修复。我已安装1.9.3并更新到1.10.0


小智 9

我的错误似乎是偶发的,但可能是由编辑“node_modules”文件夹中的文件引起的。

我删掉了

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

跑...“npm install”

现在正在工作。

注意:我尝试在删除文件之前运行“npm install”,但这并没有解决问题。

  • 没错,可能需要删除node_modules,`npm install`还不够强行重新安装。可以使用“npm install packagename”重新安装特定损坏的包,但这并不适用于所有包,也不能解决所有依赖问题。强烈建议不要在没有充分理由的情况下删除 package-lock.json,否则可能会带来新问题,除非您知道问题已在那里传播。 (2认同)

Est*_*ask 6

正如参考所述,模块分辨率仅针对 设置为节点模式,针对"modules": "commonjs"设置为经典模式"modules": "es2015"

有两种可能的模块解析策略:Node 和 Classic。您可以使用 --moduleResolution 标志来指定模块解析策略。如果未指定,默认为 Classic for --module AMD | 系统 | ES2015 或 Node 否则

由于经典模式不知道node_modules,编译器无法解析tslib模块。

moduleResolution 应该为 ES2015 模块显式设置:

...
"module": "es2015",
"moduleResolution": "node",
...
Run Code Online (Sandbox Code Playgroud)


bla*_*hub 5

更新package.json中tslib的依赖项和devDependency

{
   dependencies:{
     "tslib": "1.10.0",
   },
   devDependencies:{
     "tslib": "1.10.0",
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,仅添加依赖项就足够了,它们也以开发模式安装。 (9认同)