1

有没有办法可以将目录添加到npm的PATH中。我不想将此目录添加到机器PATH中,只是 npm 在运行脚本时使用的一个。我知道node_modules/.bin除了任何预先存在的机器PATH之外,npm 添加了(请参见此处

提供有关我的具体案例的更多详细信息。我有一个带有嵌套目录的项目,每个目录都有自己的package.json. 在依赖于父二进制文件的子目录上运行脚本时,将找不到二进制文件,因为它不在本地node_modules/.bin,而是在父目录node_modules/.bin中。我可以在脚本中指定二进制文件的路径,但这很麻烦并且使脚本的可读性降低。

那么,有没有办法告诉 npm在运行每个脚本之前导出PATH呢?它已经在做这样的事情来添加本地node_modules/.bin

4

2 回答 2

1

我想不出任何简单的方法来完成你所描述的。

您可以在脚本之前设置/修改环境变量,例如:

{
  "scripts": {
    "parent-script": "PATH=$PATH:/path/to/parent/node_modules/.bin parent-script"
  }
}

但是正如您所提到的,在每个脚本上都这样做很麻烦。你也可以按照你的描述做:

{
  "scripts": {
    "parent-script": "/path/to/parent/node_modules/.bin/parent-script"
  }
}

一种复杂但可能更易于维护的方法可能是为自己构建一个search-scriptNode 模块,该模块将遍历作为参数传递的脚本的父目录,然后运行它:

{
  "dependencies": {
    "search-script": "^0.0.1"
  },
  "scripts": {
    "parent-script": "search-script parent-script"
  }
}

不幸的是,NPM 并没有为这样的事情提供很大的灵活性。

于 2017-09-21T19:09:14.940 回答
0

我唯一能看到的是创建一个名为 npm 的 shell 脚本,将其放在 PATH 中的一个文件夹中,然后从 PATH 中删除 npm,并让你的 shell 脚本在 PATH 中设置父二进制目录,并调用 npm 二进制文件传递其余的 args . 这并不值得,并且可能会导致其他问题。

我只是将您的脚本在嵌套文件夹中依赖的所有二进制文件添加到它们自己的 package.json 中,这在某些方面是值得的,特别是如果您想独立部署它们。

这本身就是一个 node/npm 问题,因为它会迫使您多次下载同一个包,但至少很容易知道您的包使用哪个版本。

于 2017-09-21T18:26:20.900 回答