代码拉取完成,页面将自动刷新
// vue.config.js
const path = require('path')
const webpack = require('webpack')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const CompressionWebpackPlugin = require('compression-webpack-plugin')
function resolve (dir) {
return path.join(__dirname, dir)
}
module.exports = {
// type :string defalut :"/"
// 把开发服务器架设在根路径
publicPath: process.env.NODE_ENV === 'production'
? '/'
: '/',
// type :string defalut :"dist"
// 打包后的文件夹名字
outputDir: 'dist',
// type :string defalut :""
// 静态资源目录
assetsDir: 'assets',
// type :string defalut :"index.html"
// 指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。
indexPath: 'index.html',
// type :boolean defalut :"true"
// 生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,如果是vue cli创建的index.html,则为true,无法使用 Vue CLI 生成的 index HTML,为false
filenameHashing: true,
// type :boolean| error defalut :"true"
lintOnSave: true,
// type :Array<string | RegExp> defalut :"[]" (RegExp) ==> 正则
// 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来
transpileDependencies: [],
// type :boolean defalut :"true"
// SourceMap 一个存储源代码与编译代码对应位置映射的信息文件
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建
productionSourceMap: false,
// 配置别名,在项目中可缩减引用路径
// 还可以结合ProvidePlugin 使用
// 文档:https://github.com/neutrinojs/webpack-chain
// 中文介绍:https://segmentfault.com/a/1190000017547171?utm_source=tag-newest
chainWebpack: config => {
// 修复HMR,热更新
config.resolve.symlinks(true)
// 快捷访问目录
config.resolve.alias
.set('@comps', resolve('src/components'))
.set('@views', resolve('src/view'))
config.output
.filename('[name].[hash].js') // 打包文件name.hash.js
.end()
},
// type: object | function
// 调整 webpack 配置
// 如果这个值是一个对象,则会通过 webpack-merge 合并到最终的配置中。
// 如果这个值是一个函数,则会接收被解析的配置作为参数。该函数及可以修改配置并不返回任何东西,也可以返回一个被克隆或合并过的配置版本。
// 细节查看 https://cli.vuejs.org/zh/guide/webpack.html#简单的配置方式
configureWebpack: {
externals: {
'ace': 'ace'
},
plugins: [
// Ignore all locale files of moment.js
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
// 1. 服务器压缩
// 2. 前端压缩
// 服务端响应时压缩,肯定不如应用构建时压缩更合适。因为压缩也是要有时间开销的
new CompressionWebpackPlugin({
filename: '[path].gz[query]', // 目标资产文件名,默认:[path].gz[query]
algorithm: 'gzip', // 压缩算法:默认gzip
test: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i, // 匹配规则
threshold: 10240, // 仅处理大于此大小的资产
minRatio: 0.8, // 压缩比率,默认0.8
deleteOriginalAssets: false // 是否删除原始资产,默认:false
}),
// 开发环境,代码分析
// if (process.env.NODE_ENV === 'production') {
// new BundleAnalyzerPlugin({
// analyzerHost: '127.0.0.1',
// analyzerPort: 9099
// })
// }
],
optimization: {
removeAvailableModules: process.env.NODE_ENV !== 'development',
minimizer: [
// UglifyJS中文文档:https://segmentfault.com/a/1190000008995453
new UglifyJsPlugin({
uglifyOptions: {
warnings: false,
compress: {
dead_code: true, // 移除没被引用的代码
drop_console: true, // console
drop_debugger: false, // 移除 debugger
pure_funcs: ['console.log']// 移除console
}
}
})
]
}
},
// type:function
// 是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。
// 具体细节查看 https://cli.vuejs.org/zh/guide/webpack.html#链式操作(高级)
// 你需要熟悉 webpack-chain 的 API 并阅读一些源码以便了解如何最大程度利用好这个选项,但是比起直接修改 webpack 配置,它的表达能力更强,也更为安全。
// chainWebpack
css: {
// type:object defalut:{}
// 向 CSS 相关的 loader 传递选项。css预设器配置项
// loader 可以通过 loaderOptions 配置,包括:css-loader postcss-loader sass-loader less-loader stylus-loader
// 具体细节查看 https://cli.vuejs.org/zh/guide/css.html#向预处理器Loader传递选项
loaderOptions: {
css: {
// 这里的选项会传递给 css-loader
},
postcss: {
// 这里的选项会传递给 postcss-loader
},
less: {
modifyVars: {
/* less 变量覆盖,用于自定义 组件库(element-ui 或者and-design-vue)主题 */
},
javascriptEnabled: true
}
}
},
// type:boolean defalut:require('os').cpus().length > 1
// 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建
// 构建时开启多进程处理babel编译
parallel: require('os').cpus().length > 1,
// type:object
// 开发配置
// 细节查看 https://webpack.js.org/configuration/dev-server/#devserver
devServer: {
// open: true,
hot: true,
port: 9999, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
proxy: {
// 权限
'/api/authcenter': {
target: 'http://www.xxx.com/api',
ws: false,
changeOrigin: true,
pathRewrite: {
'^/api/authcenter': '/authcenter'
}
},
// xxx
'/api': {
target: 'https://xx.xxx.com',
ws: false,
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
}
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。