初始化項目
本項目是基於
@vue/cli(v4.2.3) & webpack(v4) & vuex(v3.1.2) & vue-router(v3.1.6) & ESLint(recommended) & Less(v3.11.1) & Jest & Cypress
按照官方文檔,遵循目前項目經驗的常用實踐,搭建的入門腳手架
Vue CLI 4 可以通過圖形化界面初始化項目,並安裝 Babel、PWA、Router、Vuex、Less、Linter、Jest、Cypress 等插件,相對命令行更加便捷和高效,命令如下:
<code># 安裝 vue 命令行工具
npm install -g @vue/cli /<code>
<code># 生成一個名為 vue-starter 的項目
vue create vue-starter /<code>
<code># 進入 vue-starter 項目根目錄
cd vue-starter /<code>
<code># 啟動圖形化配置界面
vue ui /<code>
以下為我的圖形化配置界面的配置:
自定義配置
雖然使用 vue ui 可以進行可視化配置,但在實際開發中,肯定有需要自定義配置的部分,我的配置如下:
<code>module.exports = {
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
outputDir: "dist",
assetsDir: "public",
indexPath: "index.html",
filenameHashing: true,
// 當在 multi-page 模式下構建時,webpack 配置會包含不一樣的插件 (這時會存在多個 html-webpack-plugin 和 preload-webpack-plugin 的實例)。如果你試圖修改這些插件的選項,請確認運行 vue inspect
pages: {
index: {
// page 的入口
entry: "src/index/main.js",
// 模板來源
template: "public/index.html",
// 在 dist/index.html 的輸出
filename: "index.html",
// 當使用 title 選項時,
// template 中的 title 標籤需要是 <title>
title: "Index Page",
// 在這個頁面中包含的塊,默認情況下會包含
// 提取出來的通用 chunk 和 vendor chunk。
chunks: ["chunk-vendors", "chunk-common", "index"]
},
// 當使用只有入口的字符串格式時,
// 模板會被推導為 `public/subpage.html`
// 並且如果找不到的話,就回退到 `public/index.html`。
// 輸出文件名會被推導為 `subpage.html`。
subpage: "src/subpage/main.js"
},
// eslint-loader 是否在保存的時候檢查
lintOnSave: true,
// 是否使用包含運行時編譯器的Vue核心的構建
runtimeCompiler: false,
// 默認情況下 babel-loader 忽略其中的所有文件 node_modules
transpileDependencies: [],
// 生產環境 sourceMap
productionSourceMap: false,
// cors 相關 https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_settings_attributes
crossorigin: "use-credentials",
// webpack 配置,鍵值對象時會合並配置,為方法時會改寫配置
// https://cli.vuejs.org/guide/webpack.html#simple-configuration
// eslint-disable-next-line no-unused-vars
configureWebpack: config => {
if (process.env.NODE_ENV === "production") {
// 為生產環境修改配置...
} else {
// 為開發環境修改配置...
}
},
// webpack 鏈接 API,用於生成和修改 webapck 配置
// https://github.com/mozilla-neutrino/webpack-chain
// eslint-disable-next-line no-unused-vars
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: {
// 默認情況下,只有 *.module.[ext] 結尾的文件才會被視作 CSS Modules 模塊。設置為 false 後你就可以去掉文件名中的 .module 並將所有的 *.(css|scss|sass|less|styl(us)?) 文件視為 CSS Modules 模塊
requireModuleExtension: true,
// 是否使用 css 分離插件 ExtractTextPlugin,採用獨立樣式文件載入,不採用 /<code>
閱讀更多 MichaelXu 的文章