cli config官網地址:https://cli.vuejs.org/zh/config/
當前使用vue2.6+ cli4.5.4版本;打包的vue.config配置文件,包括多頁面配置,打包后圖片配置域名地址,修改打包后js文件名等;

module.exports = { // 項目部署的基礎路徑 // 我們默認假設你的應用將會部署在域名的根部, // 比如 https://www.my-app.com/ // 如果你的應用時部署在一個子路徑下,那么你需要在這里 // 指定子路徑。比如,如果你的應用部署在 // https://www.foobar.com/my-app/ // 那么將這個值改為 `/my-app/` publicPath: process.env.NODE_ENV === "production" ? "./" : "/", /*這個是我存放在github在線預覽的Reader項目*/ // 將構建好的文件輸出到哪里(或者說將編譯的文件) outputDir: 'dist', // 放置靜態資源的地方 (js/css/img/font/...) assetsDir: '', // 用於多頁配置,默認是 undefined pages: { // index: { // // 入口文件 // entry: 'src/main.js', /*這個是根入口文件*/ // // 模板文件 // template: 'public/index.html', // // 輸出文件 // filename: 'index.html', // // 頁面title // title: 'Index Page', // chunks: ['chunk-vendors', 'chunk-common', 'index'] // }, // sec: { // entry: 'src/mains/sec/sec.js', // template: 'public/sec.html', // filename: 'sec.html', // title: 'sec Page', // chunks: ['chunk-vendors', 'chunk-common', 'sec'] // }, // index: { // entry: "./src/pages/index/index.js", // 配置入口js文件 // template: "./src/pages/index/index.html", // 主頁面 // filename: "index.html", // 打包后的html文件名稱 // title: "首頁", // 打包后的.html中<title>標簽的文本內容 // // 在這個頁面中包含的塊,默認情況下會包含 // // 提取出來的通用 chunk 和 vendor chunk。 // chunks: ['chunk-vendors', 'chunk-common', 'index'] // }, // baicai: {//新增的部份 // entry: "./src/pages/baicai/baicai.js", // 配置入口js文件 // template: "./src/pages/baicai/baicai.html", // 主頁面 // filename: "baicai.html", // 打包后的html文件名稱 // title: "首頁", // 打包后的.html中<title>標簽的文本內容 // // 在這個頁面中包含的塊,默認情況下會包含 // // 提取出來的通用 chunk 和 vendor chunk。 // chunks: ['chunk-vendors', 'chunk-common', 'baicai'] // }, loginpage: { entry: 'src/pages/login/login.js', // template: './index.html', template: 'src/pages/login/login.html', filename: 'login.html', title: 'login Page', // chunks: ['chunk-vendors', 'chunk-common', 'loginpage'] }, firstpage: { entry: 'src/pages/firstpage/firstpage.js', template: 'src/pages/firstpage/firstpage.html', // template: 'public/firstpage.html', filename: 'firstpage.html', title: 'firstpage Page', // chunks: ['chunk-vendors', 'chunk-common', 'firstpage'] }, secondpage: { entry: 'src/pages/secondpage/secondpage.js', template: 'src/pages/secondpage/secondpage.html', // template: 'public/secondpage.html', filename: 'secondpage.html', title: 'secondpage Page', // chunks: ['chunk-vendors', 'chunk-common', 'secondpage'] } // 簡寫格式 // 模板文件默認是 `public/subpage.html` // 如果不存在,就是 `public/index.html`. // 輸出文件默認是 `subpage.html`. // subpage: 'src/main.js' /*注意這個是*/ }, // 是否在保存的時候使用 `eslint-loader` 進行檢查。 // 有效的值:`ture` | `false` | `"error"` // 當設置為 `"error"` 時,檢查出的錯誤會觸發編譯失敗。 lintOnSave: true, // 使用帶有瀏覽器內編譯器的完整構建版本 // 查閱 https://cn.vuejs.org/v2/guide/installation.html#運行時-編譯器-vs-只包含運行時 runtimeCompiler: false, // babel-loader 默認會跳過 node_modules 依賴。 // 通過這個選項可以顯式轉譯一個依賴。 transpileDependencies: [/* string or regex */], // 是否為生產環境構建生成 source map? productionSourceMap: !process.env.NODE_ENV === "production" , // 去除打包后 hash值 filenameHashing:false, // 調整內部的 webpack 配置。 // 查閱 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/webpack.md chainWebpack: (config) => { config .module .rule("images") .test(/\.(jpg|png|gif)$/) .use("url-loader") .loader("url-loader") .options({ limit:10, // 以下配置項用於配置file-loader // 根據環境使用cdn或相對路徑 publicPath: process.env.NODE_ENV === 'development' ? '/img' : 'http://dj-vue.com/vue/img', // 將圖片打包到dist/img文件夾下, 不配置則打包到dist文件夾下 outputPath: 'img', // 配置打包后圖片文件名 name: '[name].[ext]', }).end(); // config // .module // .rule("media") // .test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/) // .use("url-loader") // .loader("url-loader") // .options({ // // // limit:10, // // // 以下配置項用於配置file-loader // // // 根據環境使用cdn或相對路徑 // // // publicPath: process.env.NODE_ENV === 'production' ? 'https://oss.yy.com/video' : './video', // publicPath: process.env.NODE_ENV === 'production' ? 'https://oss.yy.com/video' : './', // // outputPath: 'video', // // // 配置打包后圖片文件名 // name: '[name].[ext]', // }).end(); }, // configureWebpack: () => {}, // 修改打包后js文件名 configureWebpack: { // webpack 配置 output: { // 輸出重構 打包編譯后的 文件名稱 【模塊名稱.版本號.js】 filename: `js/[name].vw.js`, chunkFilename: `js/[name].vw.js` // chunkFilename: `js/[id].vw.js` }, // 修改打包后css文件名 // plugins: [ // new MiniCssExtractPlugin({ // filename: `css/[name].vw.css`, // // chunkFilename: `css/[name].${conf.version}.css` // }) // ] }, // CSS 相關選項 css: { // 將組件內的 CSS 提取到一個單獨的 CSS 文件 (只用在生產環境中) // 也可以是一個傳遞給 `extract-text-webpack-plugin` 的選項對象 extract: true, // 是否開啟 CSS source map? sourceMap: false, // 為預處理器的 loader 傳遞自定義選項。比如傳遞給 // sass-loader 時,使用 `{ sass: { ... } }`。 loaderOptions: {}, // 為所有的 CSS 及其預處理文件開啟 CSS Modules。 // 這個選項不會影響 `*.vue` 文件。 modules: false // requireModuleExtension: false }, // 在生產環境下為 Babel 和 TypeScript 使用 `thread-loader` // 在多核機器下會默認開啟。 parallel: require('os').cpus().length > 1, // PWA 插件的選項。 // 查閱 https://github.com/vuejs/vue-cli/tree/dev/packages/@vue/cli-plugin-pwa pwa: {}, // 配置 webpack-dev-server 行為。 devServer: { index: 'firstpage.html', //默認啟動serve 打開firstpage頁面 open: process.platform === 'darwin', host: '0.0.0.0', port: 8080, https: false, hotOnly: false, // 查閱 https://github.com/vuejs/vue-docs-zh-cn/blob/master/vue-cli/cli-service.md#配置代理 proxy: { '/api': { target: 'http://localhost:8880', changeOrigin: true, secure: false, // ws: true, pathRewrite: { '^/api': '/static/mock' // 請求數據路徑別名,這里是注意將static/mock放入public文件夾 } } }, before: app => {} }, // 三方插件的選項 pluginOptions: { // ... 'process.env':{ NODE_ENV:'"development"' } } }
備注:打包修改js文件后綴名稱需要注意以下幾點;
1:去掉hash值
// 去除打包后 hash值 filenameHashing:false,
2:修改js、;
// 修改打包后js文件名 configureWebpack: { // webpack 配置 output: { // 輸出重構 打包編譯后的 文件名稱 【模塊名稱.版本號.js】 filename: `js/[name].vw.js`, chunkFilename: `js/[name].vw.js` // chunkFilename: `js/[id].vw.js` }, // 修改打包后css文件名 // plugins: [ // new MiniCssExtractPlugin({ // filename: `css/[name].vw.css`, // // chunkFilename: `css/[name].${conf.version}.css` // }) // ] },
2-1css后綴;
// CSS 相關選項 css: { // 將組件內的 CSS 提取到一個單獨的 CSS 文件 (只用在生產環境中) // 也可以是一個傳遞給 `extract-text-webpack-plugin` 的選項對象 // 修改打包后css文件名 // extract: true, extract:{ filename: `css/[name].[chunkhash].vw.css`, chunkFilename: `css/[name].[chunkhash].vw.css` }, // 是否開啟 CSS source map? sourceMap: false, // 為預處理器的 loader 傳遞自定義選項。比如傳遞給 // sass-loader 時,使用 `{ sass: { ... } }`。 loaderOptions: {}, // 為所有的 CSS 及其預處理文件開啟 CSS Modules。 // 這個選項不會影響 `*.vue` 文件。 modules: false // requireModuleExtension: false },
3:設置了 filenameHashing:false后 chunk 文件還是沒有修改成功這時候需要修改 路由;
添加
/* webpackChunkName: "chunk-login" */打包時候chunk名稱就會發生變化;
import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ { path: '/login.html', name: 'login', component: () => import( /* webpackChunkName: "chunk-login" */'./components/login.vue') } ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) export default router
作用就是webpack在打包的時候,使用異步路由以及異步引入的庫代碼進行代碼分割時(需要配置webpack的SplitChunkPlugin插件),為分割后的代碼塊取得名字。
另外 import()
異步加載的寫法實現頁面模塊lazy loading懶加載(Vue中的路由異步加載):
Vue中運用import的懶加載語句以及webpack的魔法注釋,在項目進行webpack打包的時候,對不同模塊進行代碼分割,加載時,用到哪個模塊再加載哪個模塊,實現懶加載進行頁面的優化。
動態import()
打包出來文件的name是0.js,1.js,2.js,3.js ...
依次排列,有時候我們希望打包出來的文件名是打包前的文件名稱,要實現這,需要經歷3各步驟:
1.在webpack
配置文件中的output
中添加chunkFilename
。命名規則根據自己的項目來定,其中[name]
就是文件名,這一塊更詳細的說明請點擊這里。
//其他代碼.. output:{ path: path.resolve(__dirname,'public'), filename:'[name].[hash:8].js', chunkFilename:'[name].[hash:8].js' }