通過(guò)external加載外部CDN資源

一、先看兩段主要的代碼(vue.config.js和public/index.html)




const path = require('path');
module.exports = {
  publicPath: process.env.NODE_ENV === 'production' ? '' : '/',
  // 輸出文件目錄
  outputDir: process.env.NODE_ENV === 'production' ? 'dist' : 'devdist',
  lintOnSave: false,
  chainWebpack: (config) => {
    // 發(fā)布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-prod.js')

      config.set('externals', {
        vue: 'Vue',
        'vue-router': 'VueRouter',
        axios: 'axios',
        echarts: 'echarts',
        'vue-quill-editor': 'VueQuillEditor',
        'element-ui': 'ELEMENT'
      })

      config.plugin('html').tap(args => {
        args[0].isProd = true
        return args
      })
    })

    // 開(kāi)發(fā)模式
    config.when(process.env.NODE_ENV === 'development', config => {
      config
        .entry('app')
        .clear()
        .add('./src/main-dev.js')

      config.plugin('html').tap(args => {
        args[0].isProd = false
        return args
      })
    })
    //配置解析svg文件
    const svgRule = config.module.rule("svg");
    svgRule.uses.clear();
    svgRule
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
        include: ["./src/icons"]
      });
  },
  configureWebpack: (config) => {
    config.resolve = { // 配置解析別名
      extensions: ['.js', '.json', '.vue'],  // 自動(dòng)添加文件名后綴
      alias: {
        'vue': 'vue/dist/vue.js',
        '@': path.resolve(__dirname, './src'),
        '@c': path.resolve(__dirname, './src/components')
      }
    }
  },
  // 生產(chǎn)環(huán)境是否生成 sourceMap 文件
  productionSourceMap: false,
  // css相關(guān)配置
  css: {
    // 是否使用css分離插件 ExtractTextPlugin
    extract: false,
    // 開(kāi)啟 CSS source maps?
    sourceMap: false,
    // css預(yù)設(shè)器配置項(xiàng)
    loaderOptions: {
      scss: {
        prependData: `@import "./src/styles/main.scss";`
      }
    },
    // requireModuleExtension: false
    // 啟用 CSS modules for all css / pre-processor files.
    // modules: false
  },
  // use thread-loader for babel & TS in production build
  // enabled by default if the machine has more than 1 cores
  parallel: require('os').cpus().length > 1,
  /**
   *  PWA 插件相關(guān)配置,see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
   */
  pwa: {
    iconPaths: {
      favicon32: 'favicon.ico',
      favicon16: 'favicon.ico',
      appleTouchIcon: 'favicon.ico',
      maskIcon: 'favicon.ico',
      msTileImage: 'favicon.ico'
    }
  },
  // webpack-dev-server 相關(guān)配置
  devServer: {
    open: false, // 編譯完成是否打開(kāi)網(wǎng)頁(yè)
    host: '0.0.0.0', // 指定使用地址级乐,默認(rèn)localhost,0.0.0.0代表可以被外界訪問(wèn)
    port: 8080, // 訪問(wèn)端口
    https: false, // 編譯失敗時(shí)刷新頁(yè)面
    hot: true, // 開(kāi)啟熱加載
    hotOnly: false,
    proxy: {
      '/devApi': {
        target: "http://www.web-jshtml.cn/vue_admin_api/token",
        //API服務(wù)器的地址  http://www.web-jshtml.cn/api
        changeOrigin: true,
        pathRewrite: {
          '^/devApi': ''
        }
      }
    },
    overlay: { // 全屏模式下是否顯示腳本錯(cuò)誤
      warnings: true,
      errors: true
    },
    before: app => {
    }
  },
  /**
   * 第三方插件配置
   */
  pluginOptions: {}
}

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>微信息管理系統(tǒng)</title>
  <% if(htmlWebpackPlugin.options.isProd){ %>
  <!-- css -->
  <!-- 富文本編輯器 的樣式表文件 -->
  <link rel="stylesheet"  />
  <link rel="stylesheet"  />
  <link rel="stylesheet"  />
  <link rel="stylesheet"  />
  <!-- js -->
  <script src="https://cdn.jsdelivr.net/npm/vue"></script>
  <script src="https://cdn.staticfile.org/vue-router/3.1.5/vue-router.min.js"></script>
  <script src="https://cdn.staticfile.org/axios/0.19.2/axios.min.js"></script>
  <script src="https://cdn.staticfile.org/echarts/4.8.0/echarts.min.js"></script>
  <!-- 富文本編輯器的 js 文件 -->
  <script src="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script>
  <script src="https://cdn.staticfile.org/element-ui/2.13.0/index.js"></script>
  <% } %>
</head>

<body>
  <noscript>
    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
      Please enable it to continue.</strong>
  </noscript>
  <div id="app"></div>
  <!-- built files will be auto injected -->
</body>

</html>

二孕蝉、將main.js復(fù)制為兩個(gè),一個(gè)main-prod.js ,另一個(gè)main-dev.js.一個(gè)用于開(kāi)發(fā)用,一個(gè)發(fā)布用(需要注釋一些東西,見(jiàn)下文)

image.png

三抡爹、總共分為三步

1.在vue.config.js里面配置externals,添加不需要打包的依賴(這些依賴都采用cdn引入)

2.注釋上訴依賴在main-prod.js中的引入

3.將上訴依賴的cdn鏈接添加到public/index.html中

3.1 cdn鏈接 http://www.staticfile.org/
3.1注意vue的引入應(yīng)當(dāng)在element.js的前面

三、具體引入

1.element:

externals中配置 'element-ui': 'ELEMENT' 只能這么寫(xiě)
main.js相關(guān)element全部注釋
public/index.html需要引入一個(gè)js,一個(gè)css

2.echarts

main.js全部注釋
但是用到echarts的那個(gè)vue模塊 中的引入,不注釋
index中引入一個(gè)js(沒(méi)有css)

3.vue(router,axios)

main.js照常引入(什么都不用注釋)
index中引入一個(gè)js

4.nprogress

main.js中照常引入,然后注釋一個(gè)css
index中引入一個(gè)css,一個(gè)js

5.vue-quill-editor

main中只引入一個(gè)vue-quill-editor潘靖,注釋三個(gè)css
index中引入三個(gè)css,2個(gè)js

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末穿剖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子卦溢,更是在濱河造成了極大的恐慌糊余,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单寂,死亡現(xiàn)場(chǎng)離奇詭異贬芥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宣决,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門蘸劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人尊沸,你說(shuō)我怎么就攤上這事威沫。” “怎么了洼专?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵棒掠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我屁商,道長(zhǎng)句柠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任棒假,我火速辦了婚禮溯职,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帽哑。我一直安慰自己谜酒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布妻枕。 她就那樣靜靜地躺著僻族,像睡著了一般。 火紅的嫁衣襯著肌膚如雪屡谐。 梳的紋絲不亂的頭發(fā)上述么,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音愕掏,去河邊找鬼度秘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛饵撑,可吹牛的內(nèi)容都是我干的剑梳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滑潘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垢乙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起语卤,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤追逮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后粹舵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體钮孵,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年齐婴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了油猫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柠偶,死狀恐怖情妖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诱担,我是刑警寧澤毡证,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站料睛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏屎勘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一玉吁、第九天 我趴在偏房一處隱蔽的房頂上張望进副。 院中可真熱鬧敢会,春花似錦鸥昏、人聲如沸吏垮。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)征字。三九已至,卻和暖如春氮昧,著一層夾襖步出監(jiān)牢的瞬間袖肥,已是汗流浹背梧乘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工夹供, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留填渠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贸铜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子聂受,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355