使用 Package.json


管理本地模块最好的方式就是创建一个package.json文件

使用package.json文件有以下这些好处:

  1. 它可以作为你的项目的产品说明书,阐明了你的项目依赖于哪些模块
  2. 它还能允许你指定你的项目所使用的模块的版本号
  3. 它增强你项目的复用性,便于和其他开发者分享

创建package.json

package.json一般只存在于项目根目录下,在命令行中输入以下命令来创建:

npm init

接着按照命令行中的提示,依次输入项目的相关信息,注意:

  • name 属性必须全部为小写字符,不能有空格,可以有短横线或者下划线
  • version 属性的格式为 x.x.x
  • name 和 version 是必需的两个属性,你的package.json至少要包含他们

如果你不想一个一个地去填写这些属性,可以使用--yes或者-y修饰符

npm init --yes

这样 npm 会提取你的项目文件信息并帮你自动生成一个带有默认信息的 package.json 文件

注意:我们之前在没有package.json的情况下安装的 axios 模块,它自动帮我们写入了项目依赖(dependencies属性)中,并且项目的入口文件指定为index.js 是不是很神奇呢?

package.json 文件示例

一个比较完整的package.json文件如下:

{
    "name": "project",
    "version": "1.0.0",
    "author": "张三",
    "description": "第一个node.js程序",
    "keywords":["node.js","javascript"],
    "repository": {
        "type": "git",
        "url": "https://path/to/url"
    },
    "license":"MIT",
    "bugs":{"url":"http://path/to/bug","email":"[email protected]"},
    "contributors":[{"name":"李四","email":"[email protected]"}],
    "scripts": {
        "start": "node index.js"
    },
    "dependencies": {
        "express": "latest",
        "mongoose": "~3.8.3"
    },
    "devDependencies": {
        "grunt": "~0.4.1",
        "grunt-contrib-concat": "~0.3.0"
    },
    "homepage": "https://github.com/ashleygwilliams/my_package"
}

我们来看看package.json里的字段的含义:

  • name : 必需字段,当前项目文件夹的名称
  • version : 必需字段,第一次创建时总是1.0.0
  • description : 可选字段,描述
  • main : 可选字段,指定了模块加载的入口文件,当用户调用require('模块名')就会加载这个文件,默认是根目录下的index.js,
  • keywords : 可选字段,关键字
  • license : 可选字段,遵守什么样的协议(大部分开源的模块都遵守MIT协议)
  • hompage : 可选字段,模块的官方网站
  • author : 可选字段,作者
  • bugs : 可选字段,一般是问题追踪的url或者邮箱
  • contributors : 可选字段,代表该模块的贡献者信息
  • repository : 可选字段,代表模块的仓库地址
  • dependencies : 可选字段,里面列出当前你的项目在生产环境下依赖的模块
  • devDependencies :可选,里面列出当前你的项目在开发和测试环境下依赖的模块
  • scripts : 可选,脚本说明对象,主要被 npm 用来编译、测试模块,所有node_modules/.bin目录下的命令,都可以用 npm run [命令] 的格式运行

我们来试一下,在scripts字段下我们加入:

"start": "node index.js"

然后我们在命令行中运行:

npm run start

npm 就会代替我们执行 node index.js

--save 和 --save-dev install命令修饰符

既然有了package.json这么方便的东西,那么我们就可以利用它来自动帮我们在安装模块时写入模块依赖信息

当我们要安装生产环境需要使用模块时,我们使用:

npm install < 模块名 > --save

当我们要安装开发和测试环境需要使用模块时,我们使用:

npm install < 模块名 > --save-dev

我们来试一下,现在我们再给我们之前的项目安装一个webpack,用于测试环境

npm install webpack --save-dev

安装完成之后,我们会发现package.json下多出了 devDependencies 字段

"devDependencies": {
    "webpack": "^2.3.2"
  }

是不是很神奇,那么就记住这个命令,以后都利用它来管理项目依赖,不用手动去更新package.json啦!

项目的转移和交接

有时候我们在多人协作共同开发一个项目的时候,可能每个人都需要负责不同的部分的代码编写,那么我们如何来共享整个项目文件呢

有了 package.json 就方便多了,正常情况下,我们只需要把源码文件和package.json一起打包给对方就可以了,请忽略node_modules文件夹,往往里面的文件过于繁多,不利于我们转移交接。

当你拿到源码和 package.json 的时候,只需要用命令行工具 cd 进入项目文件夹根目录

接着输入以下命令

npm install

这时候 npm 就会根据 package.json 中描述的依赖列表来依次安装项目所需要的模块

如果你的项目是可以直接运行的,那么请查看 package.json 里的 scripts 字段,来运行相应命令

更多关于Package.json https://docs.npmjs.com/files/package.json