package.json
一、介绍
- 存在于根目录下
- 定义当前项目所需模块及项目配置信息
-
npm install
依赖当前文件
二、字段及含义
// ⚠️代码块一
-package.json // * 必有
{
"name": " name-is-test", // *项目名称【<214字节, ❌“. _”开头, ❌大写字母(依赖包和name),❌非URL安全字符(最终成为URL的一部分), ❌ 包含“js node”】
"version": "0.0.1", // *项目版本号-大版本.次要版本.小版本
"author": "xinxin", // 项目作者
"description": "第一个node.js程序", // 项目描述 【npm search 便于搜寻】
"keywords":["node.js","javascript"], // 关键字/标签 【npm search 便于搜寻】
"private": "false", // 非私有
"repository": { // 代码存储仓库
"type": "git",
"url": "https://path/to/url"
},
"license":"MIT", // 许可证 ⚠️详见下license 许可证
"engines": { // 指定模块运行的平台/浏览器的版本号
"node": "0.10.x",
"npm": "~1.0.2"
},
"bugs":{ // bug日志
"url":"https://github.com/owner/project/issues",
"email":"[email protected]"
},
"contributors":[ // 参与贡献者
{
"name":"李四",
"email":"[email protected]"
}
],
"scripts": { // npm 命令行简写 详见原文?http://caibaojian.com/npm/misc/scripts.html
"start": "node server.js", // server.js 是运行脚本
// "build": "./node_modules/bin/someTool.js build",
"build": "someTool build" // bin字段
},
"dependencies": { //⚠️ 项目运行依赖的模块
"express": "latest",
"mongoose": "3.8.3",
"qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
"express3-handlebars": "~0.5.0",
"asd" : "http://asdf.com/asdf.tar.gz"
"MD5": "^1.2.0",
"two" : "2.x",
"thr" : "3.3.x",
"dyl" : "file:../dyl"
},
"devDependencies": { // ⚠️ 项目开发需要的模块
"bower": "~1.2.8",
"grunt": "~0.4.1",
"grunt-contrib-concat": "~0.3.0",
"grunt-contrib-jshint": "~0.7.2",
"grunt-contrib-uglify": "~0.2.7",
"grunt-contrib-clean": "~0.5.0",
"browserify": "2.36.1",
"grunt-browserify": "~1.3.0",
},
"peerDependencies": {
// 当项目依赖与引入模块插件依赖为同一依赖且版本号不同时,可以在用户安装不符合条件的/低版本的依赖时进行提示 ⚠️ npm 3.0+ 不会默认安装 peerDependencies
"chai": "1.x"
},
"optionalDependencies": { // 当某个依赖包无法找到或者安装或者打包失败仍会继续执行下去
},
"bundledDependencies": [ // 可以下载(压缩包)依赖包到本地或通过单个文件下载依赖包并执行 npm pack
"renderized", "super-streams"
],
"bin": { // 用来指定各个内部命令对应的可执行文件的位置
"someTool": "./node_modules/bin/someTool.js", // script 字段
},
"main": "index.js", // 指定加载的入口文件,⚠️当开发者 required("name-is-test"), 使用的是index.js文件返回的对象
"homepage": "http: xxx", // 当前项目入口url
"config": {
// ⚠️ 脚本文件 server.js 可以引用config字段的值--执行脚本时,详见代码块二,用户更改config详见代码块三
// 详见原文?http://caibaojian.com/npm/misc/config.html
"port": "8080"
},
"publishConfig": { // 发布参数配置以下皆为默认值,其余参数详见 config 指向链接?
"tag": "latest", // "1.1.1" -> 开发者在安装依赖未指定版本号时则会安装tag指定的版本号
"registry": "https://registry.npmjs.org", // npm包注册表的基本URL
"access": "restricted", // public-公开可见可下载,没有明确作用域的包同常具有public的访问级别
},
"browser": {
// 指定该模板供浏览器使用的版本。
//Browserify这样的浏览器打包工具,通过它就知道该打包那个文件。
"tipso": "./node_modules/tipso/src/tipso.js"
},
"os" : [ "darwin", "linux" ], // 指定模块运行平台 ["!linux" ]✔️
"cpu" : [ "x64", "ia32" ], // 指定cpu型号
"files": ["./doc/aaa"], // 安装包被安装时所包含的所有文件,不填写时则会发布除了不被发布的文件或其他被忽略文件的所有文件,默认且一定不被发布⚠️文件详见下文
"man": ["./doc/calc.1"], // 没搞懂详见原文?(http://caibaojian.com/npm/files/package.json.html#man)
"preferGlobal": true, // 用户安装模块时不为全局时发出警告 false-不警告
"style": ["./node_modules/tipso/src/tipso.css"] // 供浏览器使用时,指定样式文件的位置,样式文件打包工具parcelify,通过它知道样式文件的打包位置。
}
// ⚠️代码块二
-serve.js
http
.createServer(...)
.listen(process.env.npm_package_config_port)
// ⚠️代码块三
-命令行
npm config set test:port 8000 // test为项目名称
license 许可证 [~可略过]
限定其他开发者使用当前项目(包)的使用方式
-
{ "license": "UNLICENSED" }
不许可,==private": true
-
{ "license" : "BSD-3-Clause" }
公共许可证【BSD-2-Clause或MIT】,可添加SPDX许可的标识符【⚠️OSI Approved】? -
{ "license" : "(ISC OR GPL-3.0)" }
多个许可声明方法 -
{ "license" : "SEE LICENSE IN
自定义许可证,⚠️根目录下创建" } 文件
版本号规则
-
1.1.1
-大版本.次要版本.小版本 -
~1.1.2
-【波浪号】安装1.1.x的最新版本(不低于1.1.2) -
^0.1.2
-【插入号】⚠️安装0.1.x的最新版本(不低于0.1.2-大版本号为0代表处于开发阶段,同~
相同规则 -
^1.1.2
-【插入号】安装1.x.x的最新版本(不低于1.1.2) -
latest
-安装最新版本
一定会包含文件 --发布时包含
package.json
README
-
CHANGES
/CHANGELOG
/HISTORY
-
LICENSE
/LICENCE
NOTICE
- The file in the "
main
" field
一定会忽略文件 --不会发布
.git
CVS
.svn
.hg
.lock-wscript
.wafpickle-N
.*.swp
.DS_Store
._*
npm-debug.log
.npmrc
node_modules
config.gypi
*.orig
-
package-lock.json
(use shrinkwrap instead)
三、创建 package.json
- 创建package.json
npm init [--yes] // --yes 跳过问题
- 如果需要提前设置一些信息,如author等,可先执行以下代码
npm set init.author.email "[email protected]"
npm set init.author.name "test"
npm set init.license "MIT"
⚠️如果已执行init,再做set设置可以删除package.json之后重新init(谨慎使用,如果设置很多,不确定会不会丢失设置)
-
script
配置命令行
npm run [script-key] // 执行命令
npm run // 查看可执行命令
-
安装依赖
-
npm install
-安装package.json中所有依赖模块 -
npm install xxx --save
-安装xxx模块并写入dependencies模块 -
npm install xxx --save-dev
-安装xxx模块并写入devDependencies模块
-
如有问题,欢迎指出? ??