nodejs之package.json
nodejs项目的根目录下面,一般都会有package.json文件,定义了这个项目中所需各种模板及项目中的配置信息。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目中所需的运行和开发环境。
仔细观察package.json文件可以发现其内部就是一个json对象,该对象的每一个成员就是当前项目的一项设置。
基础
Package.json是一个json文件。
npm init 可根据提示创建package.json模板。
{ "name": "example", "version": "1.0.0", "description": "A simple example", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
package.json属性描述:
name: 软件包名称。
author:作者名称,可进一步包含name,email,url属性。
contributors:贡献者名称数组
bugs:链接到软件包的问题追踪器,最常用的是github的issues页面。
homepages:软件包的主页。
version:指定软件包的当前版本,一般从1.0.0开始,依次是主版本号,次版本号,补丁版本号。
license:软件包的许可证,一般MIT。
keywords:包含软件包功能相关的关键字数组,有助于搜索到此软件包。
description:描述。
repository:软件包仓库所在的位置。也可为type和url的组合:
"repository":{ "type":"git", "url":"https://github.com/nodejscn/node-api-cn.git" }
main:软件包的入口点,当在应用程序中导入此软件包时,应用程序会在该位置搜索模块的导出。如:"main":"src/main.js"
bin:将模块中的一个或多个可执行文件配置到PATH路径下,使npm可执行。
{ "bin" : { "myapp" : "./cli.js" } }
当安装myapp,npm会从cli.js文件创建一个到/usr/local/bin/myapp路径下。
private:设置为ture,以防止应用程序/软件包被意外发布到npm上。
scripts:定义一组可以运行的node命令,通过npm run xxx或yarn xxx运行命令。可以为命令使用任何的名称,脚本也可以是任何操作。脚本位于本地项目内node_modules/.bin下。
"scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "jest --config test/unit/jest.conf.js --coverage", "test": "npm run unit", "lint": "eslint --ext .js,.vue src test/unit", "build": "node build/build.js" }
dependencies:依赖包列表。当使用npm(npm install packageName)或yarn(yarn add packageName)安装软件包时,该软件包会自动插入此列表中。
devDependencies:开发依赖包列表,仅安装在开发机器上,而无需在生产环境中运行代码。当使用npm(npm install --dev packageName)或yarn(yarn add --dev packageName)安装软件包时,该软件包会自动地插入此列表中。
engines:设置node.js或其他命令的版本:
"engines":{ "node":">= 6.0.0", "npm":">= 3.0.0", "yarn":"^0.13.0" }
browserslist:支持哪些浏览器,Babel、Autoprefixer 和其他工具会用到它,以将所需的 polyfill 和 fallback 添加到目标浏览器。
"browserslist": [ "> 1%", "last 2 versions", "not ie <= 8"]
此配置意味着需要支持使用率超过 1%(来自 CanIUse.com 的统计信息)的所有浏览器的最新的 2 个主版本,但不含 IE8 及更低的版本。
package-lock.json
package-lock.json会固化当前安装的每个软件包的版本,当运行npm install时,npm会使用这些确切的版本。
当运行npm update时,package-lock.json文件中的依赖的版本会被更新。
软件包版本
鉴于使用了 semver(语义版本控制),所有的版本都有 3 个数字,第一个是主版本,第二个是次版本,第三个是补丁版本,具有以下规则:
~: 如果写入的是 〜0.13.0,则只更新补丁版本:即 0.13.1 可以,但 0.14.0 不可以。 ^: 如果写入的是 ^0.13.0,则要更新补丁版本和次版本:即 0.13.1、0.14.0、依此类推。 *: 如果写入的是 *,则表示接受所有的更新,包括主版本升级。 >: 接受高于指定版本的任何版本。 >=: 接受等于或高于指定版本的任何版本。 <=: 接受等于或低于指定版本的任何版本。 <: 接受低于指定版本的任何版本。 还有其他的规则: 无符号: 仅接受指定的特定版本。 latest: 使用可用的最新版本。
还可以在范围内组合以上大部分内容,例如:1.0.0 || >=1.1.0 <1.2.0,即使用 1.0.0 或从 1.1.0 开始但低于 1.2.0 的版本。
更新package.json
如果一个模块不在package.json中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件中。以ejs为例:
npm install ejs --save
npm install ejs --save-dev
--save表示将该模块写入dependencies属性,--save -dev表示将该模块写入devDependencies属性,同时省略则表示不写入package.json文件中。
参考:
1. Nodejs中文 http://nodejs.cn/learn package.json指南