找不到模块 'babel-runtime/regenerator' 本地导入 vs 从 NPM 导入

Tho*_*yth 2 javascript node.js npm babeljs

我正在研究 NPM 模块,但我的 babel 配置遇到了问题。我正在使用 ES6,特别是异步/等待、静态类方法和导入/导出。

起初,我得到了一个共同的问题:ReferenceError: regeneratorRuntime is not defined. 因此,我babel-plugin-transform-runtime将其安装为开发依赖项并将其添加到.babelrc. 当需要使用路径名或通过 npm 作为依赖项的模块时,我遇到了错误Error: Cannot find module 'babel-runtime/regenerator'。似乎要解决这个问题,我必须 require babel-runtime,但是,当它是您发布的模块时,很多人似乎建议不要这样做。

在寻找一些指南后,我发现一个建议不要使用导入/导出,所以我尝试了。在本地构建并要求它之后,它就可以工作了。但是,当发布到 npm 并作为依赖项导入时,我继续收到错误:Error: Cannot find module 'babel-runtime/regenerator'.

  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-eslint": "^10.0.1",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-env": "^1.7.0",
    "eslint": "^5.12.0",
    "eslint-config-prettier": "^3.4.0",
    "eslint-config-standard": "^12.0.0",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-node": "^8.0.1",
    "eslint-plugin-promise": "^4.0.1",
    "eslint-plugin-standard": "^4.0.0",
    "husky": "^1.3.1",
    "jest": "^23.6.0",
    "lint-staged": "^8.1.0",
    "nodemon": "^1.18.9",
    "prettier": "^1.15.3",
    "rimraf": "^2.6.3"
  },
Run Code Online (Sandbox Code Playgroud)
{
  "presets": [
    "env"
  ],
  plugins: [
    "babel-plugin-transform-runtime"
  ]
}
Run Code Online (Sandbox Code Playgroud)

有人可以建议如何解决这个问题/在发布 npm 模块时提供一些使用 babel 的建议吗?

Tud*_*soi 10

根据文档,您需要两个模块:

  • 转换插件babel-plugin-transform-runtime(你已经有了)

  • 在运行时(即在浏览器中)填充或以其他方式启用功能的实际运行时模块是 babel-runtime

你可以将其添加为一个(非开发)依赖于package.json像

"babel-runtime": "^6.26.0"
Run Code Online (Sandbox Code Playgroud)

,或者只是做

npm i babel-runtime --save
Run Code Online (Sandbox Code Playgroud)

其他人似乎对 babel 6 也有同样的问题:

https://github.com/nozzle/react-static/issues/685