如果有人不在项目的根目录中运行 npm install ,所有依赖项将安装到哪里?
如果您的意思是“如果您在不同的目录中运行命令,它们将安装在哪里”,NPM 将向上搜索父目录,直到找到package.json
,然后将依赖项安装在node_modules
该文件旁边的文件夹。 IE。它们将始终位于项目根目录中。
另外,如果他们选择通过 Github 克隆这个项目怎么办?不管怎样,它已经准备好了,对吧?那么除了向用户提供有关项目的元数据之外,package.json 文件的用途是什么?
事实并非如此!节点项目几乎总是有一个.gitignore
明确排除的文件node_modules
从致力于版本控制,并期望你运行npm install
下载源码后。
没有什么充分理由将依赖项放在 GitHub 存储库中 - 只要项目遵循语义版本控制(绝大多数包都是这样做的),npm install
永远不会导致下载不兼容的版本,如果你绝对需要锁定依赖项的版本,你可以使用npm shrinkwrap.
EDIT:正如 Matt 的评论非常有帮助地指出的那样,NPM 有几个功能超出了简单的元数据 - 我可能最常用的是Scripts,它允许您为命令行操作创建特定于项目的别名。
这对我来说很方便的一个例子是运行 Webpack 开发服务器 - 它安装在我的项目本地devDependencies
(你可以使用--save-dev
安装软件包时的选项),所以如果我手动执行此操作,我将不得不输入以下内容:
"./node_modules/.bin/webpack-dev-server" --inline --hot
坦率地说,这会有点痛苦。相反,我可以将其添加到我的 package.json 中(请注意node_modules/.bin
使用 NPM 脚本时会自动添加到系统路径,因此您无需每次都键入):
"scripts": {
"dev": "webpack-dev-server --inline --hot"
}
然后我所要做的就是:
npm run dev
除了这个简单的用例之外,还有几个“特殊”脚本名称,它们会在某些事件时自动调用 - 例如,prepublish
在将包发布到注册表之前运行。