繁体   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