尝试做我认为很简单的事情。
我有一个使用高级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
。
为什么这么难?我做错了什么?
答案 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",
...
答案 2 :(得分:0)
我不确定我是否正确理解这里的需要,但您是否只能在babel
或prepare
脚本中运行prepublish
来电?这样只有本地npm install
来电才会接听。
详细了解npm脚本生命周期:https://docs.npmjs.com/misc/scripts