npm:从项目文件夹内的任何位置运行package.json中的脚本

pky*_*eck 12 path node.js npm

我正在使用scriptspackage.json文件中的部分来存储我必须定期运行的一些命令.

 "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"
  }
Run Code Online (Sandbox Code Playgroud)

在每个命令中,我./在路径的开头都有一个- 这就是我只能npm run-script rjs从项目的根目录调用的原因.有没有办法在package.json中引用项目的根目录,以便我可以npm test在项目的任何地方运行?

小智 6

我认为这取决于您组织项目的方式。

\n\n

我创建了一个示例项目只是为了演示。这是我的示例项目目录树:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dir1\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dir2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.js\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.js\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意: ./dir1/dir2这只是两个用于演示的空目录。

\n\n

我的package.json文件如下所示:

\n\n
{\n  "name": "sample",\n  "version": "1.0.0",\n  "description": "sample",\n  "main": "index.js",\n  "scripts": {\n    "test": "node test/test.js",\n    "start": "node src/index.js"\n  },\n  "author": "yaniv",\n  "license": "ISC"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

重点关注脚本部分,这是两行简单的代码,无需考虑我的位置。

\n\n

如果我将目录更改为/dir1/dir2并执行npm test,并且我在属性上编写的脚本test可以正确执行,而无需使用./(定义当前目录...)

\n\n

底线- 我想如果你重新组织你的项目并删除./将在你的情况下完成工作。

\n


and*_*kus 0

考虑过创建一个运行的 shell 文件吗?

例如创建一个 .sh 文件使其可执行(chmod 777 file.sh)

然后cd到你的nodejs项目根目录,运行npm命令,然后cd回你刚才离开的目录?

将脚本添加到您的环境中将使其可以从任何地方执行...

或者硬编码完整路径可以吗?(所以不要使用 ./ - put /home/user/username/yourproject/phantomjs)