如何使用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
我不确定我是否正确理解这个需求,但是您是否可以在prepare
或prepare
prepublish
脚本中运行babel
调用? 这样只有本地的npm install
调用会select。
查看更多关于npm脚本生命周期的信息: https ://docs.npmjs.com/misc/scripts