Name

必须字段。

提示:

  • 不要在name中包含js, node字样;
  • 这个名字不能以点号或下划线开头;
  • 这个名字不能包含有大写字母;
  • 这个名字可能在require()方法中被调用,所以应该尽可能短;
  • name字段不能含有非URL安全的字符,因为它将当发布的时候,它将作为你的包的相关信息被写入URL中
    那么,有哪些算是非URL安全的字符呢?

Version

必须字段。

对于"version":"x.y.z"
1.修复bug,小改动,增加z
2.增加了新特性,但仍能向后兼容,增加y
3.有很大的改动,无法向后兼容,增加x
 

npm有自己的检验version的模块——node-semver

 
npm有自己的一套检验version正确性的模块,它叫做 node-semver,是一开始就跟随着npm一起被打包安装的。当然了,你也可以通过自己安装去在自己的项目中使用它。
使用的例子像这样:
先npm install --save semver
然后:
const semver = require('semver')
semver.valid('1.2.3') // '1.2.3'
semver.valid('a.b.c') // null

Description

可选字段,必须是字符串。npm search的时候会用到。

Keywords

可选字段,字符串数组。npm search的时候会用到。

简单地说,Description和Keywords是npm搜索系统中的搜索条件,所以。如果你试图发布的是一个开源插件,那么这两个字段你应该重视

Homepage

可选字段,没有http://等带协议前缀的URL。

Bugs

可选字段,问题追踪系统的URL或邮箱地址;npm bugs用的上。

{ "url" :"http://github.com/owner/project/issues",

"email" :"project@hostname.com"

}

License

可选字段。

如果是使用一个普遍的license,比如BSD-3-Clause或MIT,直接使用:

{ "license" : "BSD-3-Clause" }

Author, contributors

都是可选字段。author是一个人,contributors是一组人。

Author的格式如下:

{ "name" : "Barney Rubble",
 "email" : "b@rubble.com",
 "url" : "http://barnyrubble.tumblr.com/"
}
name属性(必填)      email属性(选填)    URL属性(选填)

这种格式也可以:

"Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"

Files

可选字段,项目包含的一组文件。如果是文件夹,文件夹下的文件也会被包含。如果需要把某些文件不包含在项目中,添加一个”.npmignore”文件。这个文件和”gitignore”类似。

Main

可选字段。这个字段的值是你程序主入口模块的ID

这个是你项目的入口文件。简而言之,当别人安装了你发布的模块时,require你的模块的时候返回的就是这个模块的导出(exports)。
 
例如你写入了 { "main":"XXX.js"},而他人通过npm install '你的模块名称' . 安装了你的模块后,他通过 var X = require('你的模块名称')取得的就是你在XXX.js的输出

Bin

可选字段。很多的包都会有执行文件需要安装到PATH中去。

这个字段对应的是一个Map,每个元素对应一个{ 命令名:文件名 }

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

Directories

用于指示包的目录结构:

Directories.lib

指示库文件的位置。

Directories.bin

和前面的bin是一样的,但如果前面已经有bin,那么这个就无效。

除了以上两个,还有Directories.doc& Directories.man & Directories.example。

Repository

可选字段。用于指示代码存放的位置。

"repository" :
  { "type" : "git"
  , "url" : "http://github.com/npm/npm.git"
  }
 
"repository" :
  { "type" : "svn"
  , "url" : "http://v8.googlecode.com/svn/trunk/"
  }

Scripts

写进scripts的命令(command),可以通过npm run <command>或者npm <command> 运行对应的shell指令,例如:

{

  "scripts": { "start": "node main.js"}

}

可以让你在终端输入npm start的时候,等同于运行了node main.js

什么时候要加“run”,什么时候可以不用加“run”呢?

 
一个让我们可能有些困扰的问题是,通过script字段内的npm命令运行脚本时,有时候要加“run”,有时候又不要加"run",即有时候是可以直接用npm <command>;而有时候又要用npm run <command> 才能运行脚本,这该如何区分呢?
 
首先要提一下的是,run的原名是run-script,是一段脚本,而run是它的一个别名(alias)
 
1.当run[-script]被 test, start, restart, and stop这四个自带的命令所使用时,它可以被省略(或者说不需要加“run”就可以直接调用),所以我们平时最常输入的npm start实际上相当于npm run start,只不过是为了方便省略了run而已 
2.当你在package.json的script字段中定义的是除了1中的4个命令外的命令的时候,你就不能省略“run”了
例如你定义
"scripts": {
"build": "XXX.js"
}

的时候,你运行XXX.js就只能通过npm run build去运行了

npm为script字段中的脚本路径都加上了node_moudles/.bin前缀

 
npm为script字段中的脚本路径都加上了node_moudles/.bin前缀,这意味着:你在试图运行本地安装的依赖在 node_modules/.bin 中的脚本的时候,可以省略node_modules/.bin这个前缀。例如:
我刚npm install webpack了,而在我的项目下的node_modules目录的.bin子目录下:

就多了一个叫做webpack的脚本

本来运行这个脚本的命令应该是:node_modules/.bin webpack
但由于npm已经自动帮我们加了node_modules/.bin前缀了,所以我们可以直接写成:
"scripts": {"start": "webpack"}
而不用写成:
"scripts": {"start": "node_modules/.bin webpack"}

npm start是有默认值的,默认为:node server.js

·  "scripts":{"start": "node server.js"}

如果你的包里有server.js文件,npm默认将执行: node server.js.

·  "scripts":{"preinstall":"node-gyp rebuild"}

如果包里有binding.gyp,npm默认在preinstall命令时,使用node-gyp做编译。

 

better-npm-run的安装与betterScript字段的使用

 
这个是package.json文档介绍里所没有的,但这里我想特别讲一下:
 
先通过npm install better-npm-run安装好包,然后你就可以在你的package.json里面使用一个新的字段—— "betterScripts"字段
 
故名思意,它和"scripts"字段很像,那么两者间有什么联系呢?咱还是用代码说话吧,它可以把
"scripts": {
"test": "NODE_ENV=production karma start"
}
变成:
"scripts": {
"test": "better-npm-run test"
},
"betterScripts": {
"test": {
"command": "karma start",
"env": {
"NODE_ENV": "test"
}
}
}
 
简单地说,就是当运行"scripts"字段中的命令的时候,它会进一步去运行 "betterScripts"中对应的命令,并通过"env"对象控制运行时的环境变量,如NODE_ENV。
 
好处是让你的代码的可读性更强一些
 
另外提一下NODE_ENV的作用:
用来设置环境变量(默认值为development)。
通过检查这个值可以分别对开发环境和生产环境下做不同的处理
 
例如在服务端代码中通过检查是否是开发环境(development)决定是否启动代码热重载功能
热重载只是为了在开发环境【developmen】提高生产效率用,在生产环境【production】没毛用)
if (process.env.NODE_ENV === 'development') {
// 省略诸多内容
app.use(require('webpack-hot-middleware')(compiler, {
path: '/__webpack_hmr'
}))
}
 

Config

可选字段,object。

Config对象中的值在Scripts的整个周期中皆可用,专门用于给Scripts提供配置参数。

Dependencies

可选字段,指示当前包所依赖的其他包。

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  }
}

版本格式可以是下面任一种:

  • version 完全匹配
  • >version 大于这个版本
  • >=version大于或等于这个版本
  • <version
  • <=version
  • ~version 非常接近这个版本
  • ^version 与当前版本兼容
  • 1.2.x X代表任意数字,因此1.2.1, 1.2.3等都可以
  • http://... Unix系统下使用的tarball的URL。
  • *任何版本都可以
  • ""任何版本都可以
  • version1 - version2  等价于 >=version1 <=version2.
  • range1 || range2 满足任意一个即可
  • git... Git地址
  • user/repo

devDependencies

可选字段。如果只需要下载使用某些模块,而不下载这些模块的测试和文档框架,放在这个下面比较不错。

dependencies字段和devDependencies字段的区别

dependencies字段和devDependencies字段分别代表生产环境依赖和开发环境依赖
 
与两个字段相关的npm install的命令
npm install 模块 --save 安装好后写入package.json的dependencies中(生产环境依赖)
npm install 模块 --save-dev 安装好后写入package.json的devDepencies中(开发环境依赖)

怎么区分到底安装包的时候放在dependencies中还是devDepencies中呢?

很简单
1.一般你去github或者npm社区里面相关包的介绍后面都会带有--save 或者--save-dev 的参数的,这时候把命令直接复制过来运行就OK了,不用管那么多
 
2.如果没有1中的介绍,那么请思考,这个包到底是纯粹为了开发方便使用呢?还是要放到上线后APP的代码中呢?前者则为devDepencies,后者则为dependencies
 
【注意】:在团队协作中,一个常见的情景是他人从github上clone你的项目,然后通过npm install安装必要的依赖,(刚从github上clone下来是没有node_modules的,需要安装)那么根据什么信息安装依赖呢?就是你的package.json中的dependencies和devDepencies。所以,在本地安装的同时,将依赖包的信息(要求的名称和版本)写入package.json中是很重要的!

peerDependencies

可选字段。兼容性依赖。如果你的包是插件,适合这种方式。

bundledDependencies

可选字段。发布包时同时打包的其他依赖。

optionalDependencies

可选字段。如果你想在某些依赖即使没有找到,或则安装失败的情况下,npm都继续执行。那么这些依赖适合放在这里。

Engines

可选字段。既可以指定node版本:

{ "engines" : {"node" : ">=0.10.3 <0.12" } }

也可以指定npm版本:

{ "engines" : {"npm" : "~1.0.20" } }

engineStrick

可选字段,布尔值。如果你肯定你的程序只能在制定的engine上运行,设置为true。

Os

可选字段。指定模块可以在什么操作系统上运行:

"os" : [ "darwin","linux" ]

"os" : [ "!win32" ]

CPU

可选字段。指定CPU型号。

"cpu" : [ "x64","ia32" ]

"cpu" : [ "!arm","!mips" ]

preferGlobal

可选字段,布尔值。如果你的包是个命令行应用程序,需要全局安装,就可以设为true。

Private

可选字段,布尔值。如果private为true,npm会拒绝发布。这可以防止私有repositories不小心被发布出去。

publishConfig

可选字段。发布时使用的配置值放这。

项目开发之package.json的更多相关文章

  1. vue 脚手架(二,项目依赖说明 package.json)

    本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 继续上一篇, 上一篇讲了 vue ...

  2. vue项目开发之v-for列表渲染的坑

    不知道大家在用vue开发的过程中有没有遇到过在使用v-for的时候会出现大片的黄色警告,比如下图: 其实这是因为没有写key的原因 :key是为vue的响应式渲染提供方法,在列表中单条数据改变的情况下 ...

  3. Chrome插件开发之manifest.json

    广而告之: Chrome插件之一键保存网页为PDF1.1发布 http://www.cnblogs.com/bdstjk/p/3179543.html 最近做“一键保存网页为PDF”过程中,对Chro ...

  4. 项目开发之git配置

    1.本地安装git配置 安装步骤,这里不详细介绍,软件下载然后安装即可. 查看git安装版本 #git --version 2.git密钥生成 ssh-keygen -t rsa -C "f ...

  5. iOS项目开发之Socket编程

    有一段时间没有认真总结和写博客了 前段时间找工作.进入工作阶段.比较少静下来认真总结,现在静下心来总结一下最近的一些心得 前言 AsyncSocket介绍 AsyncSocket详解 AsyncSoc ...

  6. Python项目开发之CMDB理解与分析

    CMDB的由来--ITIL ITIL就是IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库),由英国政府部门CC ...

  7. 如何将项目中的package.json文件中的模块更新到最新版本

    有时候自己之前开发的项目回头运行的时候发行好多模块的版本不是最新的,此时想更为为最新版本,使用如下命令即可: npm i -g npm-check-updates ncu -u npm install

  8. 项目开发之UML之初识

  9. 基于大数据的电影网站项目开发之CentOS的安装(一)

    一.下载VMware并安装,至于安装教程从网上搜索进行参考 二.下载系统镜像文件,这里使用的是CentOS-6.5-x86_64-bin-DVD1.iso 三.安装镜像文件 运行VMware work ...

随机推荐

  1. C++基础算法学习——熄灯问题

    有一个由按钮组成的矩阵, 其中每行有6个按钮, 共5行– 每个按钮的位置上有一盏灯– 当按下一个按钮后, 该按钮以及周围位置(上边, 下边,左边, 右边)的灯都会改变状态26熄灯问题 POJ1222– ...

  2. 在 vs2017 中使用 C# 7 新特性。

    几个概念区分: 1.C#   C# 是一种.net 语言,与此类似的还有 vb,F#.不同版本的语言要配合相应的解释器才能发挥作用.目前 最新版本 为 C# 7.3. 2.VS        VS 是 ...

  3. bootstrap table使用及遇到的问题

    本人前端菜鸟一枚,最近使用bootstrap table实现表格,记录一下以便日后翻阅,废话不多说,先看效果图: 1.首先说下要实现该效果需要添加的css样式及所需的js文件,具体下载地址就不粘贴了( ...

  4. Java中关于AbstractQueuedSynchronizer的入门(二)

    AQS是一个同步器的基础类,里面的关键字段: //如下关键字段都是volatile类型 /** * Head of the wait queue, lazily initialized. Except ...

  5. PHP开发api接口安全验证方法一

    前台想要调用接口,需要使用几个参数生成签名.时间戳:当前时间随机数:随机生成的随机数 签名:特定方法生成的sign签名 算法规则在前后台交互中,算法规则是非常重要的,前后台都要通过算法规则计算出签名, ...

  6. Mysql主从同步(复制)(转)

    文章转自:https://www.cnblogs.com/kylinlin/p/5258719.html 目录: mysql主从同步定义 主从同步机制 配置主从同步 配置主服务器 配置从服务器 使用主 ...

  7. linux外接显示屏,关掉本身的笔记本电脑

    https://blog.csdn.net/a2020883119/article/details/79561035 先用xrandr命令查看: eDP-1 connected eDP-1是连接着的 ...

  8. 深入浅出的webpack构建工具---AutoDllPlugin插件(八)

    深入浅出的webpack构建工具---AutoDllPlugin插件(八) DllPlugin插件能够快速打包,能把第三方依赖的文件能提前进行预编译打包到一个文件里面去.提高了构建速度.因为很多第三方 ...

  9. 控制input输入框光标的位置

    一:理解input, textarea元素在标准浏览器下两个属性selectionStart, selectionEnd. selectionStart: 该属性的含义是 选区开始的位置: selec ...

  10. PAT A1019 General Palindromic Number (20 分)——回文,进制转换

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...