npm:从项目文件夹内的任何地方的package.json运行脚本
我正在使用package.json文件中的scripts
部分来存储一些我必须定期运行的命令。
"scripts": { "test": "./test/phantomjs ./test/js/run_jasmine_test.coffee ./test/index.html", "rjs": "r.js -o ./js/app.build.js", "less": "lessc -x ./css/app.less > ./css/app.css" }
在每个命令中,我在path的开头都有一个./
,这就是为什么我只能从项目的根目录调用npm run-script rjs
。 有没有办法在package.json中引用项目的根目录,以便我可以在我的项目中的任何地方运行npm test
?
考虑创build一个运行的shell文件?
例如创build一个.sh文件使其可执行(chmod 777 file.sh)
然后cd到你的nodejs项目根目录,运行npm命令,然后回到你刚刚离开的目录中?
将脚本添加到您的环境将使其可以在任何地方执行…
或者将硬编码的完整path是好的? (而不是使用./ – put / home / user / username / yourproject / phantomjs)
我发现一个更好的select是创build一个js脚本而不是shell脚本。 从我的经验来看,使用npm似乎更容易。 那么你可以在运行命令之前检查你所处的环境。 我们有Windows,Mac和Ubuntu的人,检查环境或使用FS包使生活更轻松。
我认为这取决于你组织项目的方式。
我创build了一个示例项目来演示。 这是我的示例项目目录树:
. ├── dir1 │ └── dir2 ├── package.json ├── src │ └── index.js └── test └── test.js
注意: ./dir1/dir2
只是两个用于演示的空目录。
我的package.json
文件如下所示:
{ "name": "sample", "version": "1.0.0", "description": "sample", "main": "index.js", "scripts": { "test": "node test/test.js", "start": "node src/index.js" }, "author": "yaniv", "license": "ISC" }
关注脚本部分,这些是简单的两行,没有考虑我的位置。
如果我将目录改为/dir1/dir2
并执行npm test
并且我在test
属性上编写的脚本被正确执行,而不使用./
(它定义当前目录…)
底线 – 我想如果你重新组织你的项目,并删除./
将在你的情况下做这项工作。