注意:该文档基于 @vue/cli 3.x 版本

设置目录别名 alias

  1. const path = require('path')
  2. function resolve(dir) {
  3. return path.join(__dirname, dir)
  4. }
  5. module.exports = {
  6. // 别名 alias
  7. chainWebpack: config => {
  8. config.resolve.alias
  9. .set('@', resolve('src'))
  10. .set('assets', resolve('src/assets'))
  11. .set('components', resolve('src/components'))
  12. }
  13. }

代理配置

请求 /api/users 现在会被代理到请求 http://192.168.0.1:8080/users

注意 api 已经被 pathRewrite 替换。

devServer.proxy | webpack

  1. module.exports = {
  2. // 代理设置
  3. devServer: {
  4. proxy: {
  5. '/api': {
  6. target: 'http://192.168.0.1:8080/',
  7. changeOrigin: true,
  8. ws: true,
  9. pathRewrite: {
  10. '^/api': ''
  11. }
  12. }
  13. }
  14. }
  15. }

环境配置

新建 .env.development 、.env.test、.env.production 文件。

Vue CLI 启动时会将 .env 文件中的配置注入到环境变量中,除了 NODEENV、 BASE_URL,其余变量需以 VUE_APP 开头。

环境变量和模式 | Vue CLI

  1. // .env.development
  2. NODE_ENV = 'development'
  3. BASE_URL = '/'
  4. VUE_APP_NAME = 'vue-quick-build'
  5. VUE_APP_FETCH_URL = 'http://192.168.0.1/
  6. VUE_APP_PUBLIC_KEY = 'VUE_APP_PUBLIC_KEY'
  7. // .env.test
  8. NODE_ENV = 'test'
  9. BASE_URL = '/'
  10. VUE_APP_NAME = 'vue-quick-build'
  11. VUE_APP_FETCH_URL = 'https://test.com/'
  12. VUE_APP_PUBLIC_KEY = 'VUE_APP_PUBLIC_KEY'
  13. // .env.production
  14. NODE_ENV = 'production'
  15. BASE_URL = '/'
  16. VUE_APP_NAME = 'vue-quick-build'
  17. VUE_APP_FETCH_URL = 'https://production.com/'
  18. VUE_APP_PUBLIC_KEY = 'VUE_APP_PUBLIC_KEY'

在 package.json 脚本中加入快捷命令:

  1. // package.json
  2. {
  3. "scripts": {
  4. "serve": "vue-cli-service serve",
  5. "dev-build": "vue-cli-service build --mode development",
  6. "test-build": "vue-cli-service build --mode test",
  7. "build": "vue-cli-service build"
  8. }
  9. }

use pug

Pug 是一款健壮、灵活、功能丰富的模板引擎,由 Jade 改名而来。

添加一个新的 Loader | Vue CLI

安装 pug loader

  1. yarn add pug pug-plain-loader -D
  2. // or
  3. npm install pug pug-plain-loader -D
  1. module.exports = {
  2. // use pug
  3. chainWebpack: config => {
  4. config.module
  5. .rule('pug')
  6. .test(/\.pug$/)
  7. .use('pug-plain-loader')
  8. .loader('pug-plain-loader')
  9. .end()
  10. }
  11. }

多页面

在 multi-page 模式下构建应用。每个“page”应该有一个对应的 JavaScript 入口文件。

multi-page | Vue CLI

配置

  1. module.exports = {
  2. pages: {
  3. index: {
  4. // page 的入口
  5. entry: 'src/index/main.js',
  6. // 模板来源
  7. template: 'public/index.html',
  8. // 在 dist/index.html 的输出
  9. filename: 'index.html',
  10. // 当使用 title 选项时,
  11. // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
  12. title: 'Index Page',
  13. // 在这个页面中包含的块,默认情况下会包含
  14. // 提取出来的通用 chunk 和 vendor chunk。
  15. chunks: ['chunk-vendors', 'chunk-common', 'index']
  16. },
  17. // 当使用只有入口的字符串格式时,
  18. // 模板会被推导为 `public/subpage.html`
  19. // 并且如果找不到的话,就回退到 `public/index.html`。
  20. // 输出文件名会被推导为 `subpage.html`。
  21. subpage: 'src/subpage/main.js'
  22. }
  23. }

目录结构

  1. .
  2. ├── README.md
  3. ├── babel.config.js
  4. ├── package-lock.json
  5. ├── package.json
  6. ├── public
  7. ├── favicon.ico
  8. └── index.html
  9. ├── src
  10. ├── assets
  11. └── logo.png
  12. ├── axios
  13. └── index.js
  14. ├── components
  15. └── HelloWorld.vue
  16. ├── index
  17. ├── App.vue
  18. ├── main.js
  19. ├── router.js
  20. └── views
  21. ├── About.vue
  22. └── Home.vue
  23. ├── mixins
  24. └── tableMixin.js
  25. ├── store.js
  26. ├── style
  27. ├── element-variables.scss
  28. └── index.scss
  29. ├── subpage
  30. ├── App.vue
  31. ├── main.js
  32. ├── router.js
  33. └── views
  34. ├── About.vue
  35. └── Home.vue
  36. └── util
  37. └── encrypt.js
  38. ├── vue.config.js
  39. └── yarn.lock