摘要:那么,我們該如何去配置自己的項目了其實這一切都是因為的項目初始化,幫開發者已經解決了,甚至絕大部分情形下的配置。
vue-cli 3 英文文檔
vue-cli 3 中文文檔
webpack 4 plugins
webpack-chain
TLDR
vue-cli 3 與 2 版本有很大區別
vue-cli 3 的 github 倉庫由原有獨立的 github 倉庫遷移到了 vue 項目下
vue-cli 3 的項目架構完全拋棄了 vue-cli 2 的原有架構,3 的設計更加抽象和簡潔(此處后續可以詳細介紹)
vue-cli 3 是基于 webpack 4 打造,vue-cli 2 還是 webapck 3
vue-cli 3 的設計原則是“0配置”
vue-cli 3 提供了 vue ui 命令,提供了可視化配置,更加人性化
由于 vue-cli 3 也學習了 rollup 的零配置思路,所以項目初始化后,沒有了以前熟悉的 build 目錄,也就沒有了 webpack.base.config.js、webpack.dev.config.js 、webpack.prod.config.js 等配置文件。
那么,我們該如何去配置自己的項目了?
其實這一切都是因為 vue-cli 3 的項目初始化,幫開發者已經解決了 80% ,甚至絕大部分情形下的 webpack 配置。
上述功能就是由 @vue/cli-service 依賴去處理,當你打開 node_modules 目錄下 @vue 中的 cli-service 看一眼,是不是找到了熟悉的感覺?
說了這么多,開發者在實際開發過程中,肯定還有需要自己去修改配置的地方,那么,該怎么做了?
這點就需要在項目根目錄下手動新建一個 vue.config.js,此處參考我提供的一個基礎模板:
module.exports = { baseUrl: process.env.NODE_ENV === "production" ? "http://your_url" : "/", outputDir: "dist", assetsDir: "static", filenameHashing: true, // When building in multi-pages mode, the webpack config will contain different plugins // (there will be multiple instances of html-webpack-plugin and preload-webpack-plugin). // Make sure to run vue inspect if you are trying to modify the options for those plugins. pages: { index: { // entry for the pages entry: "src/pages/index/index.js", // the source template template: "src/pages/index/index.html", // output as dist/index.html filename: "index.html", // when using title option, // template title tag needs to be<%= htmlWebpackPlugin.options.title %> title: "首頁", // chunks to include on this pages, by default includes // extracted common chunks and vendor chunks. chunks: ["chunk-vendors", "chunk-common", "index"] } // when using the entry-only string format, // template is inferred to be `public/subpage.html` // and falls back to `public/index.html` if not found. // Output filename is inferred to be `subpage.html`. // subpage: "" }, // eslint-loader 是否在保存的時候檢查 lintOnSave: true, // 是否使用包含運行時編譯器的Vue核心的構建 runtimeCompiler: false, // 默認情況下 babel-loader 忽略其中的所有文件 node_modules transpileDependencies: [], // 生產環境 sourceMap productionSourceMap: false, // cors 相關 https://jakearchibald.com/2017/es-modules-in-browsers/#always-cors // corsUseCredentials: false, // webpack 配置,鍵值對象時會合并配置,為方法時會改寫配置 // https://cli.vuejs.org/guide/webpack.html#simple-configuration configureWebpack: (config) => { }, // webpack 鏈接 API,用于生成和修改 webapck 配置 // https://github.com/mozilla-neutrino/webpack-chain chainWebpack: (config) => { // 因為是多頁面,所以取消 chunks,每個頁面只對應一個多帶帶的 JS / CSS config.optimization .splitChunks({ cacheGroups: {} }); // "src/lib" 目錄下為外部庫文件,不參與 eslint 檢測 config.module .rule("eslint") .exclude .add("/Users/maybexia/Downloads/FE/community_built-in/src/lib") .end() }, // 配置高于chainWebpack中關于 css loader 的配置 css: { // 是否開啟支持 foo.module.css 樣式 modules: false, // 是否使用 css 分離插件 ExtractTextPlugin,采用獨立樣式文件載入,不采用