NPM package.json文件的主要用途是什么?

aka*_*ord 9 node.js npm package.json

我从这里读到,如果他们通过npm-安装你的项目,那么package.json文件中的依赖项允许人们安装依赖项.

最后,dependencies字段用于列出npm上可用的项目的所有依赖项.当有人通过npm安装您的项目时,也会安装列出的所有依赖项.此外,如果有人在项目的根目录中运行npm install,它将安装所有依赖项到./node_modules.

如果有人没有在项目的根目录中运行npm install,那么将安装所有依赖项的位置?

另外,如果他们选择通过Github克隆这个项目呢?无论如何它都准备好了,对吗?那么在那时,除了向用户提供有关项目的元数据之外,package.json文件的目的是什么?

Joe*_*lay 8

如果有人没有在项目的根目录中运行npm install,那么将安装所有依赖项的位置?

如果你的意思是'如果你在另一个目录中运行命令它们将被安装在哪里',NPM将向上搜索父目录,直到它找到package.json,然后将依赖项安装在该node_modules文件旁边的文件夹中.IE他们总是会在项目根目录中结束.

另外,如果他们选择通过Github克隆这个项目呢?无论如何它都准备好了,对吗?那么在那时,除了向用户提供有关项目的元数据之外,package.json文件的目的是什么?

事实并非如此!节点项目总是有一个.gitignore明确排除node_modules提交版本控制的文件,并希望您npm install在下载源代码后运行.

将您的依赖项放在GitHub存储库中的原因很少 - 只要项目遵循语义版本控制(绝大多数软件包都可以),npm install就不会导致下载不兼容的版本,如果您绝对需要锁定您可以使用依赖项的版本npm shrinkwrap.

编辑:正如Matt的评论非常有用地指出的那样,NPM的一些功能超出了简单的元数据 - 我可能最常用的是Scripts,它允许您为命令行操作创建项目特定的别名.

这对我来说派上用场的一个例子就是运行Webpack开发服务器 - 它本地安装到我的项目中devDependencies(你可以--save-dev在安装软件包时使用该选项),所以如果我是手动操作,我会必须输入以下内容:

"./node_modules/.bin/webpack-dev-server" --inline --hot
Run Code Online (Sandbox Code Playgroud)

坦率地说,这会有点痛苦.相反,我可以将它添加到我的package.json中(注意,node_modules/.bin在使用NPM脚本时会自动添加到系统路径中,因此您不需要每次都输入):

"scripts": {
    "dev": "webpack-dev-server --inline --hot"
}
Run Code Online (Sandbox Code Playgroud)

然后我必须运行的是:

npm run dev
Run Code Online (Sandbox Code Playgroud)

除了这个简单的用例之外,还有一些"特殊"脚本名称会自动调用某些事件 - 例如,prepublish在将包发布到注册表之前运行.