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

试图做我认为是一件简单的事情。

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

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

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

这还不够,所以我在install添加了一个npm脚本来触发编译。 然后我不得不通过main包含编译目标lib/index.js作为我的入口点。 所以最后我的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 ,它会正确地build立。 然而当反应脚本build立这个(dep是从github),我得到一个错误: sh: 1: babel: not found

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

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

在发布到npm之前,您会希望进行编译,所以安装软件包的任何人都将拥有构build的文件。 但是,对于Github尝试像这样:

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

这个黑客工作,而不是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

我不确定我是否正确理解这个需求,但是您是否可以在prepareprepare prepublish脚本中运行babel调用? 这样只有本地的npm install调用会select。

查看更多关于npm脚本生命周期的信息: https ://docs.npmjs.com/misc/scripts