如何使用npm包的babel将被反应使用

时间:2017-11-14 23:04:09

标签: javascript node.js reactjs npm babeljs

尝试做我认为很简单的事情。

我有一个使用高级js语法的节点包。我想在反应项目中依赖它。

所以我通过--save-dev安装了babel软件包,并添加了.babelrc

{
  "presets": ["env"],
  "plugins": ["transform-object-rest-spread"]
}

这还不够,所以我在install下添加了一个npm脚本来触发编译。然后我必须通过lib/index.js将编译后的目标main作为我的入口点。所以最后我的package.json看起来像这样:

{
  "name": "bla",
  "version": "1.0.0",
  "scripts": {
    "postinstall": "babel src --out-dir lib"
  },  
  "main": "lib/index.js",
  "dependencies": {},  
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react-native": "^4.0.0"
  }
}

当我在这个项目上本地运行npm install时,它会正确构建。但是当反应脚本构建它(dep来自github)时,我收到一个错误:sh: 1: babel: not found

为什么这么难?我做错了什么?

3 个答案:

答案 0 :(得分:0)

sh: 1: babel: not found来自你的shell没有找到babel二进制文件(通常在./node_modules/.bin/babel下)

您希望在发布到npm之前进行编译,因此安装程序包的任何人都具有构建的文件。但是,对于Github尝试类似的事情:

"postinstall": "npx babel src --out-dir lib"

答案 1 :(得分:0)

这个黑客工作而不是postinstall

...
"preinstall": "npm install --ignore-scripts && babel src --out-dir lib",
...

来源:https://github.com/Financial-Times/structured-google-docs-client/commit/891180db742ed00cace0139b201850f79d337098

也相关:https://github.com/npm/npm/issues/10366

答案 2 :(得分:0)

我不确定我是否正确理解这里的需要,但您是否只能在babelprepare脚本中运行prepublish来电?这样只有本地npm install来电才会接听。

详细了解npm脚本生命周期:https://docs.npmjs.com/misc/scripts