一、基本知识
1. npm安装package.json时 直接转到当前项目目录下用命令npm install 或npm install --save-dev安装即可,自动将package.json中的模块安装到node-modules文件夹下
2. package.json 中添加中文注释会编译出错
3. 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
4. package.json文件可以手工编写,也可以使用npm init命令自动生成。
注意:npm init 时,用户需回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。
二、基本使用
1.具体属性
{
"name" : "underscore", //当前包(项目)的名字
"description" : "JavaScript's functional programming helper library.",
"homepage" : "http://documentcloud.github.com/underscore/",
"keywords" : ["util", "functional", "server", "client", "browser"],
"author" : "Jeremy Ashkenas",
"contributors" : [],
"dependencies" : [],//生产依赖
"devDependencies”:[],//开发依赖
"repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"},
"scripts": {
"build": "node build.js"
}
"main" : "underscore.js", //当前项目(包)的入口文件,该文件的导出对象作为该模块的导出对象
"version" : "1.1.6"
}
2.scripts
指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
下面的设置指定了npm run dev、npm run bulid、npm run unit、npm run test、npm run lint时,所要执行的命令。
"scripts": { "dev": "node build/dev-server.js", "build": "node build/build.js", "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", "test": "npm run unit", "lint": "eslint --ext .js,.vue src test/unit/specs" },
3.dependencies和devDependencies
dependencies和devDependencies两项,分别指定了项目运行所依赖的模块、项目开发所需要的模块。它们都指向一个对象,该对象的各个成员,分别由模块名和对应的版本要去组成,表示依赖的模块及其版本范围
--save参数表示将该模块写入dependencies属性,
--save-dev表示将该模块写入devDependencies属性。
"dependencies": { "vue": "^2.2.2", "vue-router": "^2.2.0" }, "devDependencies": { "autoprefixer": "^6.7.2", "babel-core": "^6.22.1", "babel-eslint": "^7.1.1", "babel-loader": "^6.2.10", "babel-plugin-transform-runtime": "^6.22.0", "babel-preset-env": "^1.2.1", "babel-preset-stage-2": "^6.22.0", "babel-register": "^6.22.0", "chalk": "^1.1.3", }
4.config字段
config字段用于向环境变量输出值。
{ "name" : "foo", "config" : { "port" : "8080" }, "scripts" : { "start" : "node server.js" } }
5.engines 字段
指明了该项目所需要的node.js版本
"engines": { "node": ">= 4.0.0", "npm": ">= 3.0.0" },
6.bin
许多包有一个或多个可执行文件希望被安装到系统路径。在npm下要这么做非常容易(事实上,npm就是这么运行的)。
这需要在你的package.json中提供一个bin字段,它是一个命令名和本地文件名的映射。在安装时,如果是全局安装,npm将会使用符号链接把这些文件链接到prefix/bin,如果是本地安装,会链接到./node_modules/.bin/。
比如,要使用myapp作为命令时可以这么做:
{ "bin" :
{ "myapp" : "./cli.js" }
}
这么一来,当你安装myapp,npm会从cli.js文件创建一个到/usr/local/bin/myapp的符号链接(这使你可以直接在命令行执行myapp)。
三、package-lock.json
如果package.json中使用了~或^指定版本,在重新npm i时会安装可用的最新版本,同时package-lock.json也会改变。但是如果之前的版本固定,package-lock.json也会固定。
忽略项目开发过程中有些依赖已经发生的更新而锁定当前项目所有依赖包的版本号,避免后来者新拉项目时因重新安装的依赖包版本不同而出现bug。