在前端开发中,npm已是必不可少的工具了。使用npm,不可避免的就要和package.json
打交道。平时package.json
用得挺多,可是没有认真看过官方文档。本文结合npm官方文档以及本身平时使用过程当中的感悟,谈一谈package.json
。官方文档在这里。javascript
使用npm init
命令就能够初始化一个package.json文件。在初始化的过程当中,会叫用户输入name, version等等信息,固然,你均可以忽略。一路点回车,就生成了下面这样一个初始化的package.json。html
{ "name": "test", // 假如项目叫作test "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
上面的package.json包含了项目的名称,版本号,描述,入口文件,执行脚本,做者,开源协议等。package.json的内容远不止这些,下面将一一进行介绍。在开发业务项目和开发组件库的时候,package.json是略有不同的。我会把我认为重要的配置项加黑标识出来。前端
require(${name})
就能够引入对应的程序包了。大版本.次要版本.小版本
这种版本号,好比16.1.0
。版本号的规则、含义其实蛮多的,能够参考这篇文章。来看一个例子:java
"scripts": { "dev": "NODE_ENV=dev webpack-dev-server --progress --hot --host 0.0.0.0 --port 8089", "test": "NODE_ENV=test webpack --config webpack.test.config.js --progress", "online": "NODE_ENV=production webpack --config webpack.online.config.js --progress", "build": "webpack", "node": "node server.js" },
在命令行输入:npm run dev
, 对应的命令就会被执行。这里有一个地方须要注意,当执行npm run xxx
的时候,node_modules/.bin/
目录会在运行时被加入系统的PATH变量。上面的例子,当咱们在命令行输入:npm run build
时,其实真正执行的命令是node_modules/.bin/webpack
而不是webpack
。因此,当你的webpack并未全局安装时,直接在命令行输入:webpack
是会报错的。由于你的webapck是安装在node_modules/.bin/
下面的。node
repository:对于组件库颇有用。让组件库使用者找到你的代码库地址。这个配置项会直接在组件库的npm首页生效。例子:react
"repository": { "type": "git", "url": "git+https://github.com/CoyPan/react-scroll-to-show-cb.git" },
dependencies:项目的依赖。经过npm install --save
安装的包会出如今这里。注意,不要把测试工具、代码转换器或者打包工具等放在这里。当你在命令行里面使用npm install react --save
时,react就会出如今dependencies。默认是安装最新的版本。若是想安装某个特定的版本,能够npm install react@15.6.2
。如下的dependencies,格式都是合法的,webpack
"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", "lat" : "latest", "dyl" : "file:../dyl" }
咱们常见的是下面这些:git
"dependencies": { "foo": "1.0.0", // 指定了就是1.0.0版本 "bar": "~1.2.2", // 安装版本号不低于1.2.2的1.2.x的最新版本,例如:1.2.3, 1.2.4等等。1.2.1 ,1.3.x 等就不行了 "baz": "ˆ1.2.2", // 安装版本号不低于1.2.2的1.x.x的最新版本,例如: 1.2.7,1.3.1,1.7.8等。1.2.1 ,2.0.0 等就不行了。注意,若是配置是^0.x.x,则和~0.x.x的效果同样。 "lat": "latest" // 安装最新版本 }
dependencies 还能够像下面这样配置:github
"dependencies": { "foo": "git+ssh://git@github.com:foo/foo.git#v1.0.1", }
foo组件的地址为git+ssh://{foo代码库的ssh地址}#v{foo的版本号}
web
这样的配置在下面这种场景十分有用:
组内的许多项目都有同一个功能,把这个功能抽出来作成组件是很天然的想法。可是每一个项目都有本身的代码库,公司也没有内部的npm库,组件应该放在哪里呢?能够专门为组件新建一个代码仓库,将组件放在这里开发、迭代。这样,各个项目均可以引用该组件:只须要在dependencies中将组件配置成上述的形式。至于组件的版本,能够经过git tag
来控制。
dependencies还有其余的配置方式,具体在这里查看。
npm run install --save-dev
安装的包会出如今这里。主要是在开发过程中依赖的一些工具。用法与dependencies类似。npm pack
将项目打包时,最后生成的.tgz
包中,会包含bundledDependencies中配置的依赖。bundledDependencies中的依赖必须在devDependencies或者dependencies中声明过。npm publish
发布代码。本文涵盖了package.json绝大部分的配置项。个人观点是:若是是公司的业务项目,对于package.json
,通常状况下,我以为只须要关注好scripts
,dependencies
,devDependencies
这三个地方就够了。而对于开源的组件库,则至少须要关注好上面标黑的几个点。理解好重要配置的含义,提高开发效率,减小踩坑的几率。
本文结合官方文档以及本身平时工做中的体会,阐述了package.json
这个配置文件中各项的含义以及用法。符合预期。
欢迎关注个人公众号,这里只有干货,符合你的预期。