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

时间:2016-03-26 00:40:41

标签: node.js npm package.json

我从here读到,如果他们通过npm-

安装你的项目,那么package.json文件中的依赖项允许人们安装依赖项。
  

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

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

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

1 个答案:

答案 0 :(得分:7)

  

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

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

  

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

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

将您的依赖项放在GitHub存储库中的原因很少 - 只要项目符合Semantic Versioning(绝大多数包都这样做),npm install永远不会导致要下载不兼容的版本,如果您绝对需要锁定依赖项的版本,则可以使用npm shrinkwrap

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

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

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

"scripts": {
    "dev": "webpack-dev-server --inline --hot"
}

然后我必须运行的是:

npm run dev

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