每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
package.json文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。
scripts字段
scripts指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
可以扩展不同的环境变量
例如react,需要npm install npm-run-all --save-dev
"scripts": {
"201": "npm-run-all build-css build-201",
"build-css": "less-watch-compiler --run-once src src",
"watch-css": "npm run build-css && less-watch-compiler src src",
"start-js": "node scripts/start.js",
"start": "npm-run-all -p watch-css start-js",
"build": "npm-run-all build-css build-js",
"build-js": "cross-env NODE_ENV=production node scripts/build.js",
"build-201": "cross-env NODE_ENV=201 node scripts/build.js",
"s": "npm-run-all start",
"b": "npm-run-all build",
"new": "node mode/config",
"test": "node scripts/test.js --env=jsdom"
},
例如vue配置,以下配置中有在项目运用过的。需要npm install cross-env --save-dev。可以分别直接执行npm run 201、npm run build、npm run dev(起项目)
"scripts": {
"201": "node build/201.js ",
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "cross-env NODE_ENV=production node build/build.js",
"build:report": "npm_config_report=true npm run build",
"lint": "eslint --ext .js,.vue src",
"test": "npm run lint"
},
//或者
"scripts": {
"201": "vue-cli-service build --mode 201",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
或者nuxt
"scripts": {
"201": "cross-env test=true nuxt build",
"dev": "cross-env test=true nuxt",
"dev-201": "cross-env test=true nuxt",
"build": "cross-env test=false nuxt build",
"start": "cross-env test=false nuxt start",
"generate": "cross-env test=true nuxt generate",
"lint": "eslint --ext .js,.vue --ignore-path .gitignore .",
"precommit": "npm run lint"
},
dependencies字段,devDependencies字段
dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。
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模块。
config 字段
config字段用于添加命令行的环境变量。
{
"name" : "foo",
"config" : { "port" : "8080" },
"scripts" : { "start" : "node server.js" }
}
另外可以配置proxy,跟《vue-cli中理不清的问题》中提到的proxyTable用法一致
"proxy": {
"/api": {
"target": "http://192.168.0.201:8080",
"secure": true,
"changeOrigin": true,
"pathRewrite": {
"^/api": "/"
}
}
},
改变代理服务器
使用时可以用’/api’表示"http://192.168.0.201:8080"。