为npm

时间:2017-09-21 16:53:39

标签: node.js npm path npm-scripts

有没有办法可以将目录添加到npm的 PATH 。我不希望将此目录添加到计算机 PATH ,这只是运行脚本时npm使用的目录。 我知道除了任何预先存在的机器 PATH 之外,npm还会添加node_modules/.bin(请参阅here

详细说明我的具体情况。我有一个带有嵌套目录的项目,每个目录都有自己的package.json。在依赖于父二进制文件的子目录上运行脚本时,无法找到二进制文件,因为它不在本地node_modules/.bin上,而在父node_modules/.bin内。 我可以在脚本中指定二进制文件的路径,但这很麻烦,使得脚本的可读性降低。

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

2 个答案:

答案 0 :(得分: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-script Node模块,该模块将遍历作为参数传递的脚本的父目录,然后运行它:

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

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

答案 1 :(得分:0)

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

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

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