`npm install` 没有安装本地包的子依赖项
`npm install` is not installing local package's sub-dependencies
我有一个包 (package-a
) 依赖于另一个包 (package-b
),它没有发布到 npm 但在我的文件系统上。当我从 package-a
运行 npm install
时, package-b
的依赖项没有安装。我必须使用单个 npm 命令导航到 package-b
's directory and run npm install
manually. Is there a way to install both packages' 依赖项?
这是我的目录结构:
/
...
shared/
...
javascript/
...
package-b/
package.json
package-a/
package.json
根据 the docs,我将以下内容放入 package-a/package.json
。 (我正在使用 npm 5+)
dependencies: {
package-b: "file:../shared/javascript/package-b",
}
当我导航到 /package-a
和 运行 npm install
时,它会像正常情况一样安装所有 package-a
的依赖项并复制 package-b
目录至 package-a/node_modules
。这大概是让我输入 require('package-b')
而不是 require('../shared/javascript/package-b')
的原因。
然而,正如我之前所说,package-b
s 依赖项没有安装,所以如果我尝试使用 package-a
,当 package-b
是 require
时我会得到一个错误]d 因为它试图使用本地不存在的依赖项。
再一次,为了解决这个问题,我可以导航到 package-b
和 运行 npm-install
,但我希望有更好的解决方案,因为我可能有很多这样的子包如果我可以使用 npm 命令执行此操作,我想避免编写 shell 脚本来安装我的所有依赖项。 (也许我只是做错了什么,npm install
应该有效?)
后续问题:当我从 package-b
的目录 运行 npm install
时,软件包安装在那里,但不是 package-b
的版本在第一个 npm install
期间复制到 /package-a/node_modules
,但一切仍然有效。所以现在看起来当我 require('package-b')
它实际上解析为 /shared/javascript/package-b
而不是 /package-a/node_modules/package-b
。那么首先复制文件有什么意义呢?
更新
事实证明这是 npm 5 中的错误。只有从 package-lock.json
文件安装时才会发生。 (Github Issue)
这些文件(可能)没有被复制,它们被符号链接 (symlink)。这实际上创建了一个看起来像真实目录的 alias/shortcut,但指向另一个路径。
旧的 npm link
功能就是这样工作的。原因是代码保留 "live";链接模块中的更改会在您 运行 引用它们的模块时反映出来,这意味着您不必一直 npm update
。
我有一个包 (package-a
) 依赖于另一个包 (package-b
),它没有发布到 npm 但在我的文件系统上。当我从 package-a
运行 npm install
时, package-b
的依赖项没有安装。我必须使用单个 npm 命令导航到 package-b
's directory and run npm install
manually. Is there a way to install both packages' 依赖项?
这是我的目录结构:
/
...
shared/
...
javascript/
...
package-b/
package.json
package-a/
package.json
根据 the docs,我将以下内容放入 package-a/package.json
。 (我正在使用 npm 5+)
dependencies: {
package-b: "file:../shared/javascript/package-b",
}
当我导航到 /package-a
和 运行 npm install
时,它会像正常情况一样安装所有 package-a
的依赖项并复制 package-b
目录至 package-a/node_modules
。这大概是让我输入 require('package-b')
而不是 require('../shared/javascript/package-b')
的原因。
然而,正如我之前所说,package-b
s 依赖项没有安装,所以如果我尝试使用 package-a
,当 package-b
是 require
时我会得到一个错误]d 因为它试图使用本地不存在的依赖项。
再一次,为了解决这个问题,我可以导航到 package-b
和 运行 npm-install
,但我希望有更好的解决方案,因为我可能有很多这样的子包如果我可以使用 npm 命令执行此操作,我想避免编写 shell 脚本来安装我的所有依赖项。 (也许我只是做错了什么,npm install
应该有效?)
后续问题:当我从 package-b
的目录 运行 npm install
时,软件包安装在那里,但不是 package-b
的版本在第一个 npm install
期间复制到 /package-a/node_modules
,但一切仍然有效。所以现在看起来当我 require('package-b')
它实际上解析为 /shared/javascript/package-b
而不是 /package-a/node_modules/package-b
。那么首先复制文件有什么意义呢?
更新
事实证明这是 npm 5 中的错误。只有从 package-lock.json
文件安装时才会发生。 (Github Issue)
这些文件(可能)没有被复制,它们被符号链接 (symlink)。这实际上创建了一个看起来像真实目录的 alias/shortcut,但指向另一个路径。
旧的 npm link
功能就是这样工作的。原因是代码保留 "live";链接模块中的更改会在您 运行 引用它们的模块时反映出来,这意味着您不必一直 npm update
。