package.json字段解释
来源:互联网 发布:淘宝离开时自动回复 编辑:程序博客网 时间:2024/04/20 09:14
package.json
通过 npm init 来初始化一个项目,会生成一个package.json文件
package.json通过json格式来组织数据。
最简单的package.json如下:
{
“name”: “sunyang”,
“version”: “1.0.0”
}
name和version为必须的字段。顾名思义,name为项目名,version为版本号。在npm init初始化的时候可以对其进行赋值。
name
- name里不要包含“js”和“node”,因为默认NPM包就是node.js。
- 不能以.和_开头。名字将会被作为url的一部分,所以要符合一般url命名规则
- 名字会被作为require()的参数,所以名字要尽量简明。
- 如果包要发布到NPM平台,最好检查下是否重名,字母要求小写。
version
http://semver.org/
description
包的描述信息,会在npm serch的返回结果中显示,以帮助用户选择合适的包。
keywords
包的描述信息关键字,会在npm serch的返回结果中显示,以帮助用户选择合适的包。
main
包的入口文件 .js
bin
bin项用来指定各个内部命令对应的可执行文件的位置。
"bin": { "someTool": "./bin/someTool.js"}
上面代码指定,someTool 命令对应的可执行文件为 bin 子目录下的 someTool.js。Npm会寻找这个文件,在node_modules/.bin/目录下建立符号链接。在上面的例子中,someTool.js会建立符号链接npm_modules/.bin/someTool。由于node_modules/.bin/目录会在运行时加入系统的PATH变量,因此在运行npm时,就可以不带路径,直接通过命令来调用这些脚本。
因此,像下面这样的写法可以采用简写。
scripts: { start: './node_modules/someTool/someTool.js build'}// 简写为scripts: { start: 'someTool build'}
scripts
指定了运行脚本命令的npm run+命令的命令行缩写
“scripts”:{
“perinstall”:”echo here it comes!”,
“start”: “node ./bin/start”,
“test”:”node ./bin/test”
}
如果有依赖,通常这里的命令会用到依赖的模块。
dependencies字段,devDependencies字段
devDependencies是开发环境里需要的依赖,比如单元测试。devDependencies 通常用来放我们开发时所用到的工具,比如 Webpack,Gulp,babel等等,在生产环境中是不需要的。
如需安装devDependencies,执行:
npm install packagename --dev
dependencies是生产环节里的依赖。
通过“npm install packagename”进行安装,只会安装dependencies
npm install packagename
就是说,如果NODE_ENV=production,那就会忽略devDependencies字段,如果NODE_ENV=development,则dependencies和devDependencies同时有效。
指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
latest:安装最新版本。
peerDependencies
你的项目和所依赖的模块,都会同时依赖另一个模块,但是所依赖的版本不一样。比如,你的项目依赖A模块和B模块的1.0版,而A模块本身又依赖B模块的2.0版。
大多数情况下,这不构成问题,B模块的两个版本可以并存,同时运行。但是,有一种情况,会出现问题,就是这种依赖关系将暴露给用户。
最典型的场景就是插件,比如A模块是B模块的插件。用户安装的B模块是1.0版本,但是A插件只能和2.0版本的B模块一起使用。这时,用户要是将1.0版本的B的实例传给A,就会出现问题。因此,需要一种机制,在模板安装的时候提醒用户,如果A和B一起安装,那么B必须是2.0模块。
peerDependencies字段,就是用来供插件指定其所需要的主工具的版本。
{ "name": "chai-as-promised", "peerDependencies": { "chai": "1.x" }}
上面代码指定,安装chai-as-promised模块时,主程序chai必须一起安装,而且chai的版本必须是1.x。如果你的项目指定的依赖是chai的2.0版本,就会报错。
注意,从npm 3.0版开始,peerDependencies不再会默认安装了。
optionalDependencies
如果一个依赖项可用,但希望在这个依赖项无法被找到或者安装时失败npm还能继续处理(不中断),那么你可以把它放在optionalDependencies中。和dependencies一样,optionalDependencies是一个包名和版本号或url的映射。区别在于optionalDependencies中的依赖构建失败时不会导致npm整体安装失败。
但在程序依中要对缺失的依赖做处理,比如这样:
try{ varfoo=require('foo')varfooVersion=require('foo/package.json').version}catch(er){ foo=null}if(notGoodFooVersion(fooVersion)){ foo=null}//..thenlaterinyourprogram..if(foo){ foo.doFooThings()}
optionalDependencies中的项会覆盖dependencies中的同名项,所以一个特定名字的项最好只出现在一个地方。
author
包的作者,可以使字符串,可以是json对象。
author:"sunyang"
或
author:{ name:"sunyang", blog:"http://blog.csdn.net/bless2015"}
contributors(贡献者),maintainers(维护者)
同author,可以是json数组
homepageg和bugs
模块的github地址和issues地址。
repository
指明你的代码被托管在何处,这对那些想要参与到这个项目中的人来说很有帮助。如果git仓库在github上,用npm docs命令将会找到你。比如我的github主页…
{ "repository": { "type": "git", "url": "https://github.com/3xCode/" }}
config
系统全局变量,以json形式保存信息。
config里的变量可以在其他js里直接用。通常用来保存常量,比如ip、port。
其它
license
许可
browser
browser指定该模板供浏览器使用的版本。Browserify这样的浏览器打包工具,通过它就知道该打包那个文件。
"browser": { "tipso": "./node_modules/tipso/src/tipso.js"},
engines
engines字段指明了该模块运行的平台,比如 Node 的某个版本或者浏览器。
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
os
你可以指定你的模块要运行在哪些操作系统中:
"os" : [ "darwin", "linux" ]
或者模块不允许运行在哪些操作系统:
"os" : [ "!win32" ]
preferGlobal
如果你的包是个命令行应用程序,需要全局安装,就可以设为true。
directories
告诉别人你的目录结构,包含
directories.lib
告诉你库文件夹的位置,目前没有什么地方需要用到lib文件夹,但是这是重要的元信息。
directories.bin
如果你在directories.bin中指定一个bin目录,在这个目录中的所有文件都会被当做在bin来使用。
由于bin指令的工作方式,同时指定一个bin路径和设置directories.bin将是一个错误。如果你想指定独立的文件,使用bin,如果想执行某个文件夹里的所有文件,使用directories.bin。
directories.man
directories.man指定的文件夹里都是man文件,系统通过遍历这个文件夹来生成一个man的数组。
directories.doc
把markdown文件放在这。也许某一天这些文件将被漂亮地展示出来,不过这仅仅是也许。
directories.example
把示例脚本放在这。也许某一天会被用到。
files
“files”属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是文件夹名,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
某些文件总是被包含的
package.json
README (and its variants)
CHANGELOG (and its variants)
LICENSE / LICENCE
某些文件总是被忽略的
.git
CVS
.svn
.hg
.lock-wscript
.wafpickle-N
*.swp
.DS_Store
._*
npm-debug.log
有两个没有查到什么意思dist,和gitHead,
example:
"dist": { "shasum": "b2a446b16a9db87ed3c622ba9beb1b085b1234a7", "tarball": "https://registry.npmjs.org/http-server/-/http-server-0.10.0.tgz" }, "gitHead": "a2003c1d37ea049c788d2ab3d0c7d64ea97e88da"
npm-config
Node.js v8.5.0 Documentation
What’s the difference between dependencies, devDependencies and peerDependencies in npm package.json file?
package.json详解
- package.json字段解释
- package.json 字段解析
- package.json字段说明
- package.json 字段大全
- package.json 配置参数解释
- package.json字段全解
- npm package.json字段简介
- package.json字段全解
- package.json字段全解
- package.json字段全解
- package.json字段全解
- package.json字段全解
- package.json
- package.json
- package.json
- package.json
- package.json
- package.json
- 素数
- JQuery总结------元素选择,操作,特效动画
- 二进制数据直接展开为十六进制的字符串
- NotificationListenerService 和 插件技术 ClassLoader 等的不错的分析文章地址
- VMware workstation CentOs 7 虚拟机网卡设置为NAT模式并设置固定IP
- package.json字段解释
- JavaScript函数,思维导图
- 广播和广播接收者
- 面试题(4)
- 对Thread.interrupt()方法很详细的介绍
- [CTF]No.0005 [强网杯] Who are you
- border无法设置百分比的解决办法
- SpringMVC——Spring和SpringMVC整合
- 爬虫之PermissionError: [Errno 13] Permission denied: 'ghostdriver.log'问题解决