https://github.com/staven630/vue-cli4-config
参考 https://www.cnblogs.com/sese/p/11712275.html
1、vue create project-name
? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection)
>( ) Babel //转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。
( ) TypeScript// TypeScript是一个JavaScript(后缀.js)的超集(后缀.ts)包含并扩展了 JavaScript 的语法,需要被编译输出为 JavaScript在浏览器运行
( ) Progressive Web App (PWA) Support// 渐进式Web应用程序
( ) Router // vue-router(vue路由)
( ) Vuex // vuex(vue的状态管理模式)
( ) CSS Pre-processors // CSS 预处理器(如:less、sass)
( ) Linter / Formatter // 代码风格检查和格式化(如:ESlint)
( ) Unit Testing // 单元测试(unit tests)
( ) E2E Testing // e2e(end to end) 测试
3.1、选择是否使用history router
Vue-Router 利用了浏览器自身的hash 模式和 history 模式的特性来实现前端路由(通过调用浏览器提供的接口)。
我这里建议选n。这样打包出来丢到服务器上可以直接使用了,后期要用的话,也可以自己再开起来。
选yes的话需要服务器那边再进行设置。
Use history mode for router? (Requires proper server setup for index fallback in production)
4、vue中给打包的文件指定自定义文件名以及加上哈希值解决每次打包上线存在缓存问题
const port = process.env.port || 8081 // 端口
const Timestamp = new Date().getTime();
const MiniCssExtractPlugin = require("mini-css-extract-plugin")
module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
//development:未压缩代码;production:压缩代码
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist',
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static',
//指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径
indexPath: 'index.html',
//默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。
//然而,这也要求 index 的 HTML 是被 Vue CLI 自动生成的。
//如果你无法使用 Vue CLI 生成的 index HTML,你可以通过将这个选项设为 false 来关闭文件名哈希。
filenameHashing: false,
// 是否开启eslint保存检测,有效值:ture | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development',
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
devServer: {
host: '0.0.0.0',
port: port,
open: true,
proxy: {
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8081`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
},
disableHostCheck: true
},
chainWebpack(config) {
// 从生成的资源覆写 filename 或 chunkFilename 时,assetsDir 会被忽略。
config.output.filename(`static/js/[hash].[name].${Timestamp}.js`).end();
config.output.chunkFilename('static/js/[hash].[name].' + Timestamp + '.js').end()
// css output config
let miniCssExtractPlugin = new MiniCssExtractPlugin({
filename: `static/css/[hash].[name].${Timestamp}.css`,
chunkFilename: `static/css/[hash].[name].${Timestamp}.css`
})
config.plugin('extract-css').use(miniCssExtractPlugin).end();
// 给img配置Timestamp
config.module.rule('images').use('url-loader').tap(options => {
options.name = `static/img/[hash].[name].${Timestamp}.[ext]`
options.fallback = {
loader: 'file-loader',
options: {
name: `static/img/[hash].[name].${Timestamp}.[ext]`
}
}
return options
})
}
}