我正在开发一个使用web workers in a generic way的程序包,但是在尝试将其添加为另一个项目的依赖项时发现了一些问题。
通常,我希望在进行package.json
时在install
的{{3}}部分中有一个被自动调用以生成rollup.config.js
的输出。但是它似乎什么也没执行。我对npm build
的工作方式有误解吗?
如果没有,则package.json
中还有任何其他冲突脚本导致它在下一个文件示例中不起作用:
{
"name": "web-threads",
"version": "1.0.5",
"description": "generic threads using web workers for the web",
"main": "dist/web-threads.js",
"scripts": {
"build": "rollup -c",
"test": "jest",
"test:dev": "jest --watchAll test/unit",
"test:int": "jest test/integration",
"test:cov": "jest --coverage && cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
"push": "yarn test && git push",
"deploy:major": "yarn version --major",
"deploy:minor": "yarn version --minor",
"deploy:patch": "yarn version --patch",
"deploy:push": "git push && git push --tags",
"preversion": "yarn test"
},
"keywords": [""],
"repository": "",
"author": "",
"license": "MIT",
"private": false,
"devDependencies": {
"babel-jest": "23.4.2",
"babel-preset-env": "1.7.0",
"babel-preset-stage-0": "6.24.1",
"coveralls": "3.0.2",
"faker": "4.1.0",
"jest": "23.5.0",
"jest-puppeteer": "3.3.1",
"puppeteer": "1.7.0",
"rollup": "0.65.0",
"rollup-plugin-babel": "3.0.7",
"rollup-plugin-uglify": "4.0.0",
"uglify-es": "3.3.9"
},
"babel": {
"presets": ["env","stage-0"]
},
"jest": {
"testMatch": [
"**/test/**/*-test.js"
],
"transform": {
"^.+\\.jsx|.js?$": "babel-jest"
}
}
}
我也将依赖项设置为不是devDependencies
,但这无助于解决问题。
NPM构建文档:build script
答案 0 :(得分:1)
您可以尝试添加postinstall
脚本。
如npm docs
安装后:在安装软件包后运行。
答案 1 :(得分:0)
因此@ Olian04的答案将正确的信息发送给我,并在文档中进行了深入研究。确实,我对build有一个误解,因为它实际上不是script
,而仅仅是流程阶段的hook
。
所以看来解决软件包要求的编译的正确方法是prepare运行的不同过程。这是一个文档定义为的脚本:
对于不是特定于平台的构建步骤(例如,将CoffeeScript或其他语言编译为JavaScript),请使用prepare脚本执行此操作,并将所需的程序包设为devDependency。
准备脚本将在发布之前运行,以便用户可以使用该功能而无需他们自己对其进行编译。在开发模式下(即在本地运行npm install),它也会运行此脚本,以便您可以轻松对其进行测试。
示例:
{ "name": "web-threads",
"description": "a delightfully fruity coffee varietal",
"version": "1.2.3",
"devDependencies": {
"coffee-script": "~1.6.3"
},
"scripts": {
"prepare": "coffee -o lib/ -c src/waza.coffee"
},
"main": "lib/waza.js"
}
作为总结,使用postinstall
处理需要在安装计算机/平台本地进行的操作(但需要满足所有依赖性)。将prepare
用于不依赖于平台的过程,这将不需要用户拥有所有工具来打包软件包,而且您也不会污染存储库。