4、Vue中的配置文件
一、package.json文件(1)作用:package.json 文件其实就是对项目或者模块包的描述,里面包含许多元信息。比如项目名称,项目版本,项目执行入口文件,项目贡献者等等。npm install 命令会根据这个文件下载所有依赖模块。(2)创建:package.json 文件创建有两种方式,手动创建或者自动创建。手动创建直接在项目根目录新建一个 package.json 文件,然后输入相
一、package.json文件
(1)作用:
package.json 文件其实就是对项目或者模块包的描述,里面包含许多元信息。比如项目名称,项目版本,项目执行入口文件,项目贡献者等等。npm install 命令会根据这个文件下载所有依赖模块。
(2)创建:
package.json 文件创建有两种方式,手动创建或者自动创建。
- 手动创建
 直接在项目根目录新建一个 package.json 文件,然后输入相关的内容。
- 自动创建
 也是在项目根目录下执行 npm init,然后根据提示一步步输入相应的内容完成后即可自动创建。
(3)示例:
{
  "name": "sop-vue",  //项目名
  "version": "0.1.0",
  "author": "zhangsan <zhangsan@163.com>",
  "description": "sop-vue",
  "keywords":["node.js","javascript"],
  "private": true,
  "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
  "contributors":[{"name":"李四","email":"lisi@example.com"}],
  "repository": {
                                         "type": "git",
                                         "url": "https://path/to/url"
                    },
  "homepage": "http://github.com/style.css",
  "license":"MIT",
  "dependencies": {
  "bd-font-icons": "^1.1.3",
  "core-js": "^3.6.4",
  "echarts": "^4.7.0",
  "element-ui": "^2.13.1",
  "v-charts": "^1.19.0",
  "vue": "^2.6.11",
  "vue-router": "^3.1.6",
  "vuex": "^3.1.3"
},
  "devDependencies": {
  "@vue/cli-plugin-babel": "^4.3.0",
  "@vue/cli-plugin-eslint": "^4.3.0",
  "@vue/cli-plugin-router": "^4.3.0",
  "@vue/cli-plugin-unit-mocha": "^4.3.0",
  "@vue/cli-plugin-vuex": "^4.3.0",
  "@vue/cli-service": "^4.3.0",
  "@vue/test-utils": "1.0.0-beta.31",
  "babel-core": "^6.26.3",
  "babel-eslint": "^10.1.0",
  "babel-loader": "^7.1.5",
  "babel-preset-env": "^1.7.0",
  "chai": "^4.1.2",
  "eslint": "^6.7.2",
  "eslint-plugin-vue": "^6.2.2",
  "sass": "^1.26.3",
  "sass-loader": "^8.0.2",
  "vue-template-compiler": "^2.6.11"
}
  "scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit",
"lint": "vue-cli-service lint"
  },
  "bin": {
  "webpack": "./bin/webpack.js"
  },
  "main": "lib/webpack.js",
  "module": "es/index.js",
  "eslintConfig": {
    "extends": "vue-app"
  },
  "engines" : {
    "node" : ">=0.10.3 <0.12"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "style": [
  "./node_modules/tipso/src/tipso.css"
],
  "files": [
    "lib/",
    "bin/",
    "buildin/",
    "declarations/",
    "hot/",
    "web_modules/",
    "schemas/",
    "SECURITY.md"
  ]
}
(4)package.json 文件配置说明:
| 选项 | 说明 | 必填 | 
| name | 项目/模块名称,长度必须小于等于214个字符,不能以"."(点)或者"_"(下划线)开头,不能包含大写字母 | 是 | 
| version | 项目版本 | 是 | 
| author | 项目开发者,它的值是你在https://npmjs.org网站的有效账户名,遵循“账户名<邮件>”的规则 | 否 | 
| description | 项目描述,是一个字符串。它可以帮助人们在使用npm search时找到这个包 | 否 | 
| keywords | 项目关键字,是一个字符串数组。它可以帮助人们在使用npm search时找到这个包 | 否 | 
| private | 是否私有,设置为 true 时,npm 拒绝发布 | 否 | 
| license | 软件授权条款,让用户知道他们的使用权利和限制 | 否 | 
| bugs | bug 提交地址 | 否 | 
| contributors | 项目贡献者 | 否 | 
| repository | 项目仓库地址 | 否 | 
| homepage | 项目包的官网 URL | 否 | 
| dependencies | 生产环境下,项目运行所需依赖 | 否 | 
| devDependencies | 开发环境下,项目所需依赖 | 否 | 
| scripts | 执行 npm 脚本命令简写,比如 “serve”: “vue-cli-service serve”, 执行 npm run serve 就是运行 “npm vue-cli-service serve” | 否 | 
| bin | 内部命令对应的可执行文件的路径 | 否 | 
| main | 项目默认执行文件,比如 require(‘webpack’);就会默认加载 lib 目录下的 webpack.js 文件,如果没有设置,则默认加载项目跟目录下的 index.js 文件 | 否 | 
| module | 是以 ES Module(也就是 ES6)模块化方式进行加载,因为早期没有 ES6 模块化方案时,都是遵循 CommonJS 规范,而 CommonJS 规范的包是以 main 的方式表示入口文件的,为了区分就新增了 module 方式,但是 ES6 模块化方案效率更高,所以会优先查看是否有 module 字段,没有才使用 main 字段 | 否 | 
| eslintConfig | EsLint 检查文件配置,自动读取验证 | 否 | 
| engines | 项目运行的平台 | 否 | 
| browserslist | 供浏览器使用的版本列表 | 否 | 
| style | 供浏览器使用时,样式文件所在的位置;样式文件打包工具parcelify,通过它知道样式文件的打包位置 | 否 | 
| files | 被项目包含的文件名数组 | 否 | 
这个文件保存着项目的时候配置的项目基本信息,它是个标准的json格式文件,编写时要注意格式,重点要关注一下scripts里面的内容,这里面包含了项目的一些指令简写,在这里可以配置启动不同环境的项目的指令。
二、vue.config.js文件
vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。
这个文件应该导出一个包含了选项的对象:

2.1 跨域之proxyTable代理配置
(1) 为何要使用proxyTable
在VUE的这种项目里,一般前端用webpack进行开发与打包;
前端在开发的时候,要调用后端的接口。但开发与生产调用的后端地址不同:
- 开发状态下,前端代码调用后端的代码,一是存在调用地址的一不致;二是在调用服务端的ajax时,会有跨域的问题需要解决;
- 生产状态下,就没有什么问题了,一堆打好包的js,css,html放在服务端工程启动的服务里而已;
(2) 如何使用proxyTable
首先要在项目目录中找到根目录下config文件夹下的index.js文件;
由于我们是在开发环境下使用,自然而然是要配置在dev里面(devServer):
dev: {
  env: require('./dev.env'),
  port: 8080,
  autoOpenBrowser: true,
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  proxyTable: { //跨域配置
    '/api': {
      target: 'http://www.abc.com',  //目标接口域名
      changeOrigin: true,  //是否跨域
      pathRewrite: {
        '^/api': '/'   //重写接口名。 
      // 重写前:http://www.abc.com/api/xxx  重写后:http://www.abc.com/xxx
      }
    },
  cssSourceMap: false
}上面这段代码的效果就是将本地8080端口的一个请求代理到了http://www.abc.com这一域名下;
- '/api': {...}:就是告诉node, 我接口只要是’/api’开头的才用代理,所以你的接口就要这么写 /api/xx/xx. 最后代理的路径就是 http://xxx.xx.com/api/xx/xx;
- pathRewrite的作用:因为正确的接口路径是没有/api的,所以需要用'^/api': '/',表示请求接口时去掉api。
 
2.2 vue.config.js基础配置
(1)vue.config.js基础配置代码
module.exports = {
    publicPath: "./", // 公共路径 默认为"/",建议使用"./"相对路径
    devServer: {   // 本地服务器配置(npm run serve)
      port: 8080, // 端口
      host: "localhost", // 域名
      https: false, // 是否开启https
      open: true	// 是否在开启服务器后自动打开浏览器访问该服务器
      // 访问 : http://localhost:8080/api/info
      // 代理到 http://localhost:8081/api/info
      // 真正的接口地址:http://localhost:8081/new/api/info
        proxy: {
            '^/api': {
              target: 'http://localhost:8081', //代理地址,这里设置的地址会代替axios中设置的baseURL。将/api前的域名代理为http://localhost:8081
              changeOrigin: true, //是否跨域
              pathRewrite: {'^/api' : '/'} // 重写/api
            },
            '^/foo': {
              target: 'http://localhost:8081'
            }
          }
    },
    lintOnSave: false,  // 取消lint语法检测,此处可不配置
    outputDir:"dist", // build打包输出目录
    assetsDir:"assets", // 静态文件输出目录,基于dist
    indexPath: "index.html",  // 输出html文件名
    productionSourceMap: false, // 取消.map文件的打包,加快打包速度
    configureWebpack: (config) => {
      // process.env为环境变量,分别对应.env.development文件和.env.production文件 此处表示加快开发环境打包速度
      if (process.env.NODE_ENV !== 'production') return;
      config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;	//生产环境去掉console.log
      return {  // 此处配置webpack.config.js的相关配置
        plugins: [],
        performance: {}
      };
    }
};
(2)每一个配置项的具体效果及意义
1.publicPath——公共路径配置项,默认为"/",此配置项是影响打包生成文件的引入资源公共路径的
publicPath: "/project_2",
先看一下配置之前的打包文件
  再看一下按配置后的打包文件
  可以看到所有引入文件的地址前都被做了处理
devServer: {   // 本地服务器配置(npm run serve)
  port: 8080, // 端口
  host: "localhost", // 域名
  https: false, // 是否开启https
  open: true	// 是否在开启服务器后自动打开浏览器访问该服务器
},
这个配置项所影响的只有本地服务器,也就是用npm run serve打开的webpack服务器的配置项,这里强调一下open:true这个配置项是在我们使用npm run serve部署本地服务器后自动打开浏览器并访问该服务器,这里默认是false,所以配置此项后是可以节省我们打开浏览器的操作的。
3.lintOnSave——lint语法检测
lintOnSave: false这里配置为true时打包后会严格进行代码lint规范检测,这里通常配置为false,对代码规范有很强的要求的项目可以开启,开启后每次打包后或在webpack服务器的控制台上都会把你代码不规范的地方balabalabala的列出来一片黄色的字,不懂的朋友可以查一下lint规范,这里举个例子,比如你的代码是这样写的:
if(this.init){ 
	var a=1; 
}else{ 
	var a=2; 
}
但link就会认为这样语法不规范,它就会在控制台用黄色的字告诉你不能把同一个变量var两次,所以你就要改成这样:
var a;
if(this.init){
	a=1;
else{
	a=2;
}
4.outputDir——build打包输出目录
outputDir:"dist",

  就是打包的目录名,默认为dist
5.assetsDir——静态文件输出目录,基于dist
assetsDir:"assets",可以看到我们开发目录src下的所有静态资源文件在打包后全部都集中在assets文件夹中了,这里补充一下,图片中assets目录下面的static目录是开发目录public目录下的静态资源文件,public目录下的文件打包时文件名不会重新生成哈希值。

6.indexPath——打包生成的html文件名
indexPath: "index.html",
 7.productionSourceMap——取消.map文件的打包
 7.productionSourceMap——取消.map文件的打包
productionSourceMap: false,
建议配置此项,.map文件没有什么作用,这里配置为false,可以加快打包速度
8.configureWebpack: (config) => { return {…} }——在…中配置webpack配置项,相当于webpack.config.js
configureWebpack: (config) => {
  if (process.env.NODE_ENV !== 'production') return;	// 加快开发环境打包速度
  config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true;	//生产环境去掉console.log
  return {  // 此处配置webpack.config.js的相关配置
    plugins: [],
    performance: {}
  };
}
在vue-cli项目中webpack.config.js文件是无效的,但是可以在vue.config.js中的configureWebpack中进行webpack配置,下面展示一下我配置过的一个项目
 这里就是加了一个webpack插件,大家可以根据自己项目需求来配置webpack
 这里就是加了一个webpack插件,大家可以根据自己项目需求来配置webpack
9. Css相关配置

css.modules
Type: boolean
Default: false
默认情况下,只有 *.module.[ext] 结尾的文件才会被视作 CSS Modules 模块。设置为 true 后你就可以去掉文件名中的 .module 并将所有的 *.(css|scss|sass|less|styl(us)?) 文件视为 CSS Modules 模块。
css.extract
Type: boolean | Object
Default: 生产环境下是 true,开发环境下是 false
是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。
css.sourceMap
Type: boolean
Default: false
是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能。
css.loaderOptions
Type: Object
Default: {}
向 CSS 相关的 loader 传递选项。
支持的 loader 有:
参考:https://blog.csdn.net/qq_40279656/article/details/107805720
更多推荐
 
 



所有评论(0)