16

我正在使用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"
  }

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

4

4 回答 4

5

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

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

.
├── 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./

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

于 2017-03-05T23:17:29.283 回答
3

INIT_CWD

INIT_CWD我们可以通过npm为我们设置 的环境变量来引用项目的根目录!

文档

脚本从模块的根目录运行,无论您调用 npm run 时当前的工作目录是什么。如果您希望脚本根据您所在的子目录使用不同的行为,您可以使用INIT_CWD环境变量,它保存您在运行 npm run 时所在的完整路径。

例子:

"tas:adminApp:build": "cd src/KidoService/AdminApp && npm run build && cd $INIT_CWD && gulp build_copyAdminApp",

只是因为我爱想太多!

如果我们没有为我们设置这样的变量怎么办!

我们可以在所有开始时执行一个环境变量设置命令!export ROOT_DIR=$PDW

然后在我们需要的时候!我们可以使用它!

上面的例子会变成

"tas:adminApp:build": "export ROOT_DIR=$PDW && cd src/KidoService/AdminApp && npm run build && cd $ROOT_DIR && gulp build_copyAdminApp",

你可以看到这是一个很好的技术!我们可以使用它来引用一些我们想要返回的目录!

对于我们使用的窗户set VAR=VALUE

于 2020-06-06T04:16:59.433 回答
0

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

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

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

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

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

于 2013-02-04T01:32:10.927 回答
0

我发现一个更好的选择是创建一个 js 脚本而不是 shell 脚本。根据我的经验,处理 npm 似乎更容易。然后,您可以在运行命令之前检查您所处的环境。我们有 Windows、macs 和 ubuntu 的人,检查环境或使用 fs 包让生活更轻松。

于 2014-03-11T13:56:31.860 回答