构建和发布

构建

当项目开发完毕,执行以下命令打包项目:

# 打包测试环境
npm run build:sit

# 打包正式环境
npm run build

打包成功之后,会在根目录生成 dist 文件夹,里面就是打包好的文件。

如果需要自定义目录,参照 outputDir

分析构建文件大小

如果你的 dist 包很大,你可以查看 dist 包里面的文件或者打印 report.html 来找到问题所在。

分析 dist 包

  • 如果 dist 包里面包含着大量 .map 后缀的文件,这个是源代码映射文件,可以修改 vue.config.js 来优化,查看 css-sourcemapproductionSourceMap。本项目已设置为 false。

  • 如果是静态资源过大,图片则用 PS 等工具进行压缩即可。

分析 report.html

执行以下命令,构建出 report.html

npm run build:report

然后 dist 包里就多了一个 report.html 文件,双击打开即可查看。

优化原理可以参考 Webpack 大法之 Code Splitting。本项目已做了一些通用优化,具体查看 vue.config.js

发布

项目的开发、优化、打包已经搞定好了之后,最后一步就是发布了。对于发布来讲,只需要将最终生成的静态文件,也就是 dist 文件夹的静态文件发布到你的 cdn 或静态服务器即可。

本项目 Vue-Router 路由模式使用 hashHistory,链接上会有 # 符号,去除请参照 HTML5 Hhistory模式

TIP

项目部署默认是域名的根路径上,如果不是,修改请查看 publicPath

场景延伸

当项目发布后,却遇到修改接口地址,但是构建的 dist 包是写死的了。我们就需要重新修改、测试、打包。这样想想都挺麻烦的,所以最好解决方案就是有个 config 文件方便我们管理这些。解决方法:

  • /public 目录下新建 static 文件夹,然后在里面新建 config.js 文件,内容为:
window.g = {
    baseURL: 'http://www.example.com'
}
  • /public/index.html 里面引入 config.js
<script src="<%= BASE_URL %>static/config.js"></script>
  • 最后在 @/utils/request.js 使用:
export const instance = axios.create({
    baseURL: window.g.baseURL
})

如果 config.js 需要根据环境,你可以判断当前环境,然后使用哪个变量即可。

// config.js
window.g = {
    baseURL-dev: 'http://www.example.com/dev',
    baseURL-sit: 'http://www.example.com/sit',
    baseURL-prod: 'http://www.example.com/prod'
}

// @/utils/request.js
export const instance = axios.create({
    baseURL: window.g[`baseURL-${process.env.VUE_APP_ENV_CONFIG}`]
})

或者你只想暴露生产的链接。

// config.js
window.g = {
    baseURL: 'http://www.example.com/prod'
}

// @/utils/request.js
let baseURL = process.env.VUE_APP_BASE_API
if (process.env.NODE_ENV === 'production') {
    baseURL = window.g.baseURL
}
export const instance = axios.create({
    baseURL: baseURL
})