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:作者名称,可进一步包含nameemailurl属性。

contributors:贡献者名称数组

bugs:链接到软件包的问题追踪器,最常用的是githubissues页面。

homepages:软件包的主页。

version:指定软件包的当前版本,一般从1.0.0开始,依次是主版本号,次版本号,补丁版本号。

license:软件包的许可证,一般MIT

keywords:包含软件包功能相关的关键字数组,有助于搜索到此软件包。

description:描述。

repository:软件包仓库所在的位置。也可为typeurl的组合:

"repository":{
  "type":"git",
  "url":"https://github.com/nodejscn/node-api-cn.git"
}

main:软件包的入口点,当在应用程序中导入此软件包时,应用程序会在该位置搜索模块的导出。如:"main":"src/main.js"

bin:将模块中的一个或多个可执行文件配置到PATH路径下,使npm可执行。

{ "bin" : { "myapp" : "./cli.js" } }

当安装myappnpm会从cli.js文件创建一个到/usr/local/bin/myapp路径下。

private:设置为ture,以防止应用程序/软件包被意外发布到npm上。

scripts:定义一组可以运行的node命令,通过npm run xxxyarn 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:依赖包列表。当使用npmnpm install packageName)或yarnyarn add packageName)安装软件包时,该软件包会自动插入此列表中。

devDependencies:开发依赖包列表,仅安装在开发机器上,而无需在生产环境中运行代码。当使用npmnpm install --dev packageName)或yarnyarn add --dev packageName)安装软件包时,该软件包会自动地插入此列表中。

engines:设置node.js或其他命令的版本:

"engines":{
  "node":">= 6.0.0",
  "npm":">= 3.0.0",
  "yarn":"^0.13.0"
}

browserslist:支持哪些浏览器,BabelAutoprefixer 和其他工具会用到它,以将所需的 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指南

2. nodejs package.json详解

posted @ 2020-07-05 19:09  yuxi_o  阅读(1077)  评论(0编辑  收藏  举报