注意:新版 vue-admin-beautiful 为了便于静态演示,所以打包时默认集成了 mock,如果不需要请找到
src/main.js
注释掉 mock 引入如何打包
注意:打包前,务必配置打包后的要调用的 api 接口地址已经配置成功,在
src/config/settings.js
中配置,一般打包部署分为三种种情况:
1、nigix 代理:那你只要在src/config/settings.js
配置接口后缀就可以啦,通过 nginx 代理转发
2、传统前后端分离部署:那你需要在src/config/settings.js
配置接口地址包含请求协议与端口号,如http://192.168.1.59:8080/api
3、前后端部署到一起:那你需要在src/config/settings.js
配置接口地址为空即可,如``
cnpm run build
修复 vue/cli4 热更新失效
module.exports = {
chainWebpack(config) {
config.resolve.symlinks(true);
},
};
开启 gzip 压缩
cnpm i -S compression-webpack-plugin
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const productionGzipExtensions = ["html", "js", "css", "svg"];
module.exports = {
chainWebpack(config) {
config
.plugin("compression")
.use(CompressionWebpackPlugin, [
{
filename: "[path].gz[query]",
algorithm: "gzip",
test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
threshold: 8192,
minRatio: 0.8,
},
])
.end();
},
};
开启 Zopfli 压缩
cnpm i -S compression-webpack-plugin @gfx/zopfli brotli-webpack-plugin
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const BrotliPlugin = require("brotli-webpack-plugin");
const zopfli = require("@gfx/zopfli");
const productionGzipExtensions = ["html", "js", "css", "svg"];
module.exports = {
chainWebpack(config) {
config
.plugin("compression")
.use(CompressionWebpackPlugin, [
{
algorithm(input, compressionOptions, callback) {
return zopfli.gzip(input, compressionOptions, callback);
},
compressionOptions: {
numiterations: 15,
},
test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
minRatio: 0.8,
},
])
.end();
config
.plugin("brotli")
.use(BrotliPlugin, [
{
test: new RegExp("\\.(" + productionGzipExtensions.join("|") + ")$"),
minRatio: 0.8,
},
])
.end();
},
};
注入 sass 全局变量
module.exports = {
css: {
requireModuleExtension: true,
sourceMap: true,
loaderOptions: {
scss: {
/*sass-loader 7.0写法 */
//data: '@import "~@/styles/variables.scss";',
/*sass-loader 8.0写法 */
//prependData: '@import "~@/styles/variables.scss";',
/*sass-loader 9.0写法*/
additionalData(content, loaderContext) {
const { resourcePath, rootContext } = loaderContext;
const relativePath = path.relative(rootContext, resourcePath);
if (
relativePath.replace(/\\/g, "/") !== "src/styles/variables.scss"
) {
return '@import "~@/styles/variables.scss";' + content;
}
return content;
},
},
},
},
};
开启 eslint 自动校验
module.exports = {
lintOnSave: true,
};
关于图片存放位置的问题
module.exports = {
assetsDir: "static",
};
把项目用的所有图片都放到
src/assets
文件夹下,图片引用直接require("@/assets/文件夹/图片")
即可,图片会自动加密并编译到 static 目录。