一、name,npm包名
name和version字段是package.json文件中最重要的字段,都是必须的字段,如果你的npm包没有指定这两个字段,将无法被安装。name和version字段被假定组合成一个唯一的标识符,包内容的更改和包版本的更改是同步的。

1、命名规则
name的长度必须小于等于214个字符。
name不能以"."(点)或者"_"(下划线)开头。
name中不能包含大写字母。
name最终将被用作URL的一部分、命令行的参数和文件夹名。因此,name不能含有非URL安全的字符。

2、命名建议
不要使用已存在的name作为包名,开发包前,先检查npm的registry,确认name的唯一性,可以参考https://www.npmjs.com/。
不要在name中使用"js"和"node",这会假定这是js文件,一旦你写一个package.json文件,你就可以在"engines"字段中指定解释器引擎。
name字段可能会被传递给require()函数,因此它最好是简短的、自描述的。
一个name可以用scope来指定一个前缀,比如@myorg/mypackage,可以参考npm-scope。

二、version,npm包版本号
npm采用"语义版本"管理软件包。所谓语义版本,就是指版本号为x.y.z的形式,其中x是大版本号,y是小版本号(功能),z是补丁号(修复bug)。

三、description,npm包描述
description是一个字符串,它可以帮助人们在使用npm search时找到这个包。

四、keywords,npm包关键字
keywords是一个字符串的数组,它可以帮助人们在使用npm search时找到这个包。

五、homepage,npm包的主页url
这和"url"不一样,是没有http://等带协议前缀的URL。

六、bugs
项目的提交问题的url和(或)邮件地址,这对使用该包遇到问题的用户会有帮助。

{
 "url" : "https://github.com/owner/project/issues",
 "email" : "project@hostname.com"
}

可以择其一或者两个都写上,如果只想提供一个url,你可以对"bugs"字段指定一个字符串而不是object。
如果提供了一个url,它会被用于npm bugs命令。

七、license
你应该对你的包指定一个license让用户知道他们的使用权利和和任何限制。BSD-3-Clause,MIT,ISC是通用许可证。

{ "license" : "ISC" }

八、author,contributors
author是一个人,contributors是一些人的数组。author是一个对象,拥有必须的name字段和可选的url和email字段。

{
  "name": "camille",
  "email": "camille@pet.org",
  "url": "http://camille.pet.com.cn/"
}

或者你也可以使用单个字符串的精简形式,npm会帮你解析它。

"camille <camille@pet.org> (http://camille.pet.com.cn/)"

这里email和url也是可选的。

九、files
files字段是一个被项目包含的文件名数组,如果你在里面放一个文件夹名,那么这个文件夹中的所有文件都会被包含进项目中(除非是那些在其他规则中被忽略的文件)。
你还可以在包的根目录或子目录下提供一个".npmignore"文件来忽略项目包含文件,即使这些文件被包含在files字段中。.npmignore文件和.gitignore的功能很像。

十、main
这个字段的值是程序主入口模块的ID。如果其他用户需要你的包,当用户调用require()方法时,返回的就是这个模块的导出(exports)。

十一、repository
指明你的代码被托管在何处,这对那些想要参与到这个项目中的人来说很有帮助。如果git仓库在github上,用npm docs命令将会找到你。
十二、scripts
scripts指定了运行脚本命令的npm命令行缩写,比如start代替npm run start所要执行的命令。
十三、config
config字段用于向环境变量输出值。
十四、dependencies
dependencies字段是一个对象,它指定了项目运行时依赖的模块和版本范围映射,也可以是git url。
十五、devDependencies
devDependencies字段是一个对象,它指定了项目开发时依赖的模块。如果有人要用你的模块,但他们可能不需要你开发所使用的外部测试或者文档框架。
十六、engines
1、指定node的版本

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

和dependencies类似,如果你不指定一个node版本(或者你用'*'指定),则任何一个node版本都可以。
2、指定安装这个包的npm版本

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

请注意,除非用户设置了engine-strict标记,否则这个字段只是一个建议值。

十七、private
设置"private": true时,npm会拒绝发布当前包。这是一个防止意外发布私有包的方式。
如果你希望包装某个包只能被发布到特定的一个registry中(比如,一个内部的registry),则可以使用publishConfig字典来重写registry的publish-time配置参数。

以上是package.json文件的常用字段说明,下面说下package-lock.json。

package-lock.json是当node_modules或package.json发生变化时自动生成的文件。这个文件主要功能是确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新。

遗留问题:怎么通过命令,设置package.json中的字段呢?我用npm set设置author,没起作用啊。。。

最后,附上一份package.json文件,仅供参考。

{
  "name": "mywebpack",
  "version": "1.0.0",
  "description": "this is mywebpack",
  "keywords": [
    "build",
    "demo",
    "webpack"
  ],
  "homepage": "github.com/vuejs/vue#readme",
  "bugs": {
    "url": "https://github.com/vuejs/vue/issues"
  },
  "license": "ISC",
  "author": "camille",
  "files": [
    "src",
    "dist/*.js",
    "types/*.d.ts"
  ],
  "main": "index.js",
  "repository": "camille666/webpack",
  "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
      "start": "webpack",
      "server": "webpack-dev-server --open",
      "build": "webpack-dev-server --inline"
    },
    "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "dependencies": {
    "babel-core": "6.x",
    "babel-loader": "6.x",
    "babel-preset-es2015": "6.x",
    "css-loader": "0.x",
    "file-loader": "0.x",
    "html-webpack-plugin": "2.x",
    "open-browser-webpack-plugin": "0.x",
    "style-loader": "0.x",
    "url-loader": "~0.5.6",
    "webpack": "1.x",
    "webpack-dev-server": "1.x"
  },
  "devDependencies": {
    "babel-core": "6.x",
    "babel-loader": "6.x",
    "babel-preset-es2015": "6.x",
    "css-loader": "0.x",
    "file-loader": "0.x",
    "html-webpack-plugin": "2.x",
    "open-browser-webpack-plugin": "0.x",
    "style-loader": "0.x",
    "url-loader": "~0.5.6",
    "webpack": "1.x",
    "webpack-dev-server": "1.x"
  },
  "engines" : {
      "node" : "6.0.0",
      "npm" : "~5.0.20"
  }
}

之前总是疑惑,克隆一个包下来,为什么还要npm install,今天明白,原来是要安装依赖,说白了就是安装node_modules文件夹。那么如果我自己写了一个包,放到github上面去,不想把node_modules放上去,怎么办?写一个.gitignore文件就行。

十八、版本号介绍

补丁版本:解决了Bug或者一些较小的更改,增加最后一位数字,比如 1.0.1;
小版本:增加了新特性,同时不会影响之前的版本,增加中间一位数字,比如 1.1.0;
大版本:大改版,无法兼容之前的,增加第一位数字,比如 2.0.0;
^接受小版本自动更新,*接受大版本更新,接受补丁更新。

npm的packagejson文件的更多相关文章

  1. Angular Npm Package.Json文件详解

    Angular7 Npm Package.Json文件详解   近期时间比较充裕,正好想了解下Angular Project相关内容.于是将Npm官网上关于Package.json的官方说明文档进行了 ...

  2. npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?

    npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?   npm作为node开发过程中的必备工具,长期使用之后,您可能会想:这些全局安装的node包都放在硬盘里面的哪个地方?配置文件.npmr ...

  3. npm 配置全局文件

    nodejs.npm 按照默认安装完成即可. 1.设置一下全局目录:配置npm的全局模块的存放路径以及cache的路径,将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"n ...

  4. npm package.json文件解读

    每个Nodejs项目的根目录下面,一般都会有一个package.json文件.该文件可以由npm init生成,定义了项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据). pa ...

  5. npm下载安装文件太慢..修改这个就好了..治好多年的便秘..真香预警

    修改 npm 的安装目录下的 npmrc文件 增加一条 registry=http://registry.cnpmjs.org 将原来的https改成下面的http $ npm config set ...

  6. shell脚本npm构建静态文件

    #!/bin/bash cd /data/web source /etc/profile /usr/bin/cnpm i && npm run build cp -r ./dist/* ...

  7. npm压缩js文件

    参考:https://blog.csdn.net/msy_msy/article/details/78261383 1.压缩单个js文件 cnpm install uglify-js -g 安装 1& ...

  8. npm 与 package.json 快速入门

    npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧! 读完本文你将了解: 什么是 npm 安装 npm 更新 npm ...

  9. npm学习(五)之使用package.json

    使用package.json 管理本地安装的npm包的最佳方法是创建一个package.json文件. 一个packagejson文件: 列出项目所依赖的包. 允许使用语义版本控制规则指定项目可以使用 ...

随机推荐

  1. requests 的基本用法

    r = requests.get('www.baidu.com') r.request.headers{'User-Agent': 'python-requests/2.18.4', 'Accept- ...

  2. JSP Filters(过滤器)

    Filter是拦截Request请求的对象:在用户的请求访 问资源前处理ServletRequest以及ServletResponse,它可 用于日志记录.加解密.Session检查.图像文件保护 等 ...

  3. poj2417 bsgs算法非逆元模板,用于求解A^x=B(mod C)的方程

    参考博客 https://blog.csdn.net/clover_hxy/article/details/50683832关于欧拉定理推论的证明 https://www.cnblogs.com/as ...

  4. PHP编译安装时常见错误解决办法

    转载自:http://www.bkjia.com/PHPjc/1008013.html This article is post on https://coderwall.com/p/ggmpfa c ...

  5. MyBatis mysal 日报表,月,年报表的统计

    mysql 按日.周.月.年统计sql语句整理,实现报表统计可视化 原文地址:http://blog.csdn.net/u010543785/article/details/52354957 最近在做 ...

  6. 解决OS睡眠功能中,移动鼠标就会唤醒

    设备管理器,在相应项目上右键属性.

  7. 关于sql和MySQL的语句执行顺序

    sql和mysql执行顺序,发现内部机制是一样的.最大区别是在别名的引用上. 一.sql执行顺序 (1) from (3) join (2) on (4) where (5) group by(开始使 ...

  8. 求自然数幂和 B - The Sum of the k-th Powers CodeForces - 622F

    题解: 很多方法 斯特林数推导略麻烦但是不依赖于模数 代码: 拉格朗日插值 由于可以证明这是个K+1次多项式于是可以直接用插值 #include <bits/stdc++.h> using ...

  9. 【ASP.NET】UCenter实现多站点同步注册

    问题描述 上一篇文章写了[ASP.Net]UCenter实现多站点同步登录退出 在整合论坛的时候,同步注册也是相当必要的一个功能:将论坛注册的用户同步到自己的网站,自己网站注册的用户同步到论坛. 官方 ...

  10. 【Android】Android 代码判断当前设备是否为模拟器

    [Android]Android 代码判断当前设备是否为模拟器 方法比较简单,直接粘贴代码 //判断当前设备是否是模拟器.如果返回TRUE,则当前是模拟器,不是返回FALSE public stati ...