[Vue CLI 3] 外掛解析之 @vue/cli-plugin-b
本文我們來看一下官方的這個 @vue/cli-plugin-babel
先看一下原始碼檔案:
generator.jsindex.js
核心的有 2
個檔案,我們主要第一個 index.js
,最外層結構多是外掛式的標準結構:
module.exports = (api, options) => { // ...}
這裡因為我們要擴充套件 webpack
的配置,所以使用了:api.chainWebpack
api.chainWebpack(webpackConfig => { // ...})
我們先執行 vue inspect --rule js
看一下最終生成的配置:
/* config.module.rule('js') */{ test: /.jsx?$/, exclude: [ function () { /* omitted long function */ } ], use: [ /* config.module.rule('js').use('cache-loader') */ { loader: 'cache-loader', options: { cacheDirectory: '/Users/***/node_modules/.cache/babel-loader', cacheIdentifier: '2f4347b9' } }, /* config.module.rule('js').use('babel-loader') */ { loader: 'babel-loader' } ] }
對照著這個我們來寫相對會簡單一點:
1、配置 module
、 rule
和 test
注意這裡的 rule
是 js
,也就是我們之前 vue inspect 用到的
const jsRule = webpackConfig.module .rule('js') .test(/.jsx?$/)
2、配置 exclude
透過 add
方法
.exclude .add(filepath => { // ... }) .end()
具體的函式:
/.vue.jsx?$/
options.transpileDependencies
返回 false
這裡的
transpileDependencies
是在vue.confg.js
中配置的,開發者可以自行配置
/node_modules/
cliServicePath
返回 true
if (/.vue.jsx?$/.test(filepath)) { return false}// exclude dynamic entries from cli-serviceconst cliServicePath = require('path').dirname(require.resolve('@vue/cli-service'))if (filepath.startsWith(cliServicePath)) { return true}// check if this is something the user explicitly wants to transpileif (options.transpileDependencies.some(dep => filepath.match(dep))) { return false}// Don't transpile node_modulesreturn /node_modules/.test(filepath)
3、配置 use
.use('cache-loader') .loader('cache-loader') .options() .end()
4、根據條件判斷是否增加 thread-loader
條件如下:使用者在 vue.config.js
中是否配置了 parallel
而且要是 production
環境
const useThreads = process.env.NODE_ENV === 'production' && options.parallel
還是用 .user
和 .loader
if (useThreads) { jsRule .use('thread-loader') .loader('thread-loader') }
最後追加了一個 babel-loader
jsRule .use('babel-loader') .loader('babel-loader')
作者:dailyvuejs
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2815505/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Vue-Cli3外掛實戰一:vue-cli-plugin-dllVuePlugin
- [Vue CLI 3] 配置解析之 parallelVueParallel
- [Vue CLI 3] 配置解析之 css.extractVueCSS
- vue-cli解析Vue
- VUE 全家桶 vue-cli 2 | vue-cli 3Vue
- Vue-cli@3.0 外掛系統簡析Vue
- 在vue-cli引入postcss外掛的小教程VueCSS
- VUE CLI 3 配置Vue
- [Vue CLI 3] 原始碼系列之useTaobaoRegistryVue原始碼
- vue外掛Vue
- 窺探 Vue CLI3 UI 內建外掛 - 關閉網路埠VueUI
- [Vue CLI 3] @vue/cli-plugin-eslint 原始碼分析VuePluginEsLint原始碼
- VUE-CLI3配置Vue
- 「Vue進階」一篇文章,教你學會Vue-CLI 外掛開發Vue
- vue-cli ui設計解析VueUI
- vue cli3 配置postcssVueCSS
- 淺談 vue-cli 擴充套件性和外掛設計Vue套件
- 一篇文章,教你學會Vue CLI 外掛開發Vue
- Sublime裝vue外掛Vue
- Vue(1):用Vue-cli構建Vue3專案Vue
- VUE學習之腳手架(vue-cli)Vue
- vue cli 3的簡單理解Vue
- 快速上手最新的 Vue CLI 3Vue
- vue-quill-editor富文字外掛 · 解析網路.txtVueUI
- vue輪播圖外掛Vue
- Vue-router外掛使用Vue
- Vue-外掛開發Vue
- vite如何打包vue3外掛為JSSDKViteVueJS
- 精美的Vue3流程外掛,歡迎使用。Vue
- vue實踐01之vue-cli腳手架Vue
- 【vue系列】vue 和 echats 結合的春天,vue外掛vechartVue
- fastclick外掛的使用--移動端vue專案開發(vue常用外掛)ASTVue
- 基於vue-cli@3+vue全家桶仿小米商城Vue
- webpack5 七牛雲打包外掛,支援vue-cli5構建WebVue
- vue-cli3專案 升級到 vue-cli4 的方法總結Vue
- Vue CLI 3.X 初體驗Vue
- vue(16)vue-cli建立專案以及專案結構解析Vue
- 手寫vue-router & 什麼是Vue外掛Vue