npm install 不适用于 --prefix

tBl*_*abs 15 node.js npm

似乎npm install --prefix ./server(没有参数)不适用于--prefix标志。我只想从 package.json 安装所有包。在该命令之后我得到的只是:

npm WARN enoent ENOENT: 没有这样的文件或目录,打开'/home/.../ProjectName/server/package.json'

当我npm install package_name -S --prefix ./server举个例子时,一切都很好。那么NPM将建立node_modulesserver并会增加package_name包。

我的文件结构是:

ProjectName
|
+-- client
|   +-- node_modules
|   +-- package.json
+-- server
|   +-- node_modules
+-- package.json
Run Code Online (Sandbox Code Playgroud)

“Main”package.json包含所有脚本(适用于 Heroku 和适用于我)和服务器的依赖项。 client是 Angular2 应用程序,这就是为什么它有自己的 node_modules 和 package.json。

我使用 NPM 4.2.0。对于 5.0.3 版(最新的?),似乎--prefixflag 根本不起作用。

编辑#1

我刚刚发现我可以用npm install(将安装node_modules在我的项目文件夹中)解决我的问题,然后复制node_modulesserver/node_modules. 如果没有该副本,jasmine则会在tsc构建期间引发错误。

现在我必须node_modules在主目录中将它们复制到server. 这太奇怪了。。

编辑#2

根据@Damian Lattenero回答:

npm --prefix ./server install ./ProjectName/package.json

或者

npm --prefix ProjectName/server install ./ProjectName/package.json

不工作并产生:

npm 错误!代码 ENOLOCAL npm ERR!无法安装“RecursiveNotebook3/package.json”,因为它不是目录,也不是名称以 .tgz、.tar.gz 或 .tar 结尾的文件

这有效:

npm --prefix ProjectName/server install ./ProjectName

但会产生:

npm WARN saveError ENOENT: no such file or directory, open '/home/tb/Projects/RecursiveNotebook3/server/package.json' npm notice 创建了一个 lockfile 作为 package-lock.json。你应该提交这个文件。npm WARN enoent ENOENT: 没有那个文件或目录,打开'/home/tb/Projects/RecursiveNotebook3/server/package.json'

package-lock.json 旁边 node_modules

etc旁边的空目录node_modules

tsc -p server使用 mongodb 包构建 ( )存在一些问题。

Dam*_*ero 5

尝试:

npm --prefix ./server install ./ProjectName/package.json
Run Code Online (Sandbox Code Playgroud)

或者

npm install --prefix ./server ./ProjectName/package.json
Run Code Online (Sandbox Code Playgroud)

此外,为了更好地了解 --prefix 的作用,您可以查看以下两个答案:

如何 npm install 到指定目录?

npm - 在不同的文件夹中安装包的依赖项?