Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript `npm install`未安装本地软件包';s子依赖项_Javascript_Node.js_Npm_Npm Install - Fatal编程技术网

Javascript `npm install`未安装本地软件包';s子依赖项

Javascript `npm install`未安装本地软件包';s子依赖项,javascript,node.js,npm,npm-install,Javascript,Node.js,Npm,Npm Install,我有一个包(package-a),它依赖于另一个包(package-b),该包未发布到npm,但在我的文件系统中。当我从package-a运行npm install时,package-b的依赖项未安装。我必须导航到package-b的目录并手动运行npm install。有没有办法用一个npm命令安装两个包的依赖项 以下是我的目录结构: / ... shared/ ... javascript/ ... package-b/ pac

我有一个包(
package-a
),它依赖于另一个包(
package-b
),该包未发布到npm,但在我的文件系统中。当我从
package-a
运行
npm install
时,
package-b
的依赖项未安装。我必须导航到
package-b
的目录并手动运行
npm install
。有没有办法用一个npm命令安装两个包的依赖项

以下是我的目录结构:

/
  ...
  shared/
    ...
    javascript/
      ...
      package-b/
        package.json
  package-a/
    package.json
根据,我将以下内容放在
package-a/package.json
中。(我正在使用npm 5+)

当我导航到
/package-a
并运行
npm install
时,它会像普通一样安装所有
package-a
的依赖项,并将
package-b
目录复制到
package-a/node\u模块中。这大概就是让我键入
require('package-b')
而不是
require('../shared/javascript/package-b')
的原因

但是,正如我前面所述,
package-b
s依赖项未安装,因此如果我尝试使用
package-a
,当
package-b
require
d时,我会收到一个错误,因为它试图使用本地不存在的依赖项

再一次,为了解决这个问题,我可以导航到
package-b
并运行
npm install
,但我希望有更好的解决方案,因为我可能有很多这样的子包,如果我可以用npm命令来完成这项工作,我希望不必编写shell脚本来安装所有依赖项。(也许我只是做错了什么,
npm安装
应该可以正常工作了?)


后续问题:当我从
package-b
目录运行
npm安装时,软件包安装在那里,但不是在第一次
npm安装期间复制到
/package-a/node_模块的
package-b
版本中,但一切仍然正常。所以现在,当我
require('package-b')
时,它实际上是解析为
/shared/javascript/package-b
,而不是
/package-a/node\u modules/package-b
。那么,复制文件首先有什么意义呢


使现代化 原来这是NPM5中的一个bug。它仅在从
包锁.json
文件安装时发生。()

文件(可能)没有被复制,而是被符号链接(symlink)。这实际上创建了一个别名/快捷方式,看起来像一个真实的目录,但指向另一个路径


这就是旧的
npm链接
功能的工作原理。原因是代码保持“有效”;无论何时运行引用链接模块的模块,链接模块中的更改都会反映出来,这意味着您不必一直更新npm。

这回答了我的第二个问题(谢谢),但不是我的第一个问题。事实证明,有问题的行为是由npm中的错误引起的。我现在接受这个答案,因为它回答了我的第二个问题。
dependencies: {
  package-b: "file:../shared/javascript/package-b",
}