为 npm 设置自定义路径

set custom PATH for npm

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

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

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

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

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

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

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

您可以 set/modify 环境变量就在脚本之前,例如:

{
  "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-script 节点模块,它将遍历父目录以获取作为参数传递的脚本,然后 运行 它:

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

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