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属性上编写的脚本被正确执行,而不使用./ (它定义当前目录…)

底线 – 我想如果你重新组织你的项目,并删除./将在你的情况下做这项工作。