欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

使用webpack搭建vue項(xiàng)目及注意事項(xiàng)-創(chuàng)新互聯(lián)

有一句話叫“前人栽樹后人乘涼”,還有一句話叫“如果說我看得比別人更遠(yuǎn)些,那是因?yàn)槲艺驹诰奕说募绨蛏稀?。前一句是國人的俗語,后一句是那個(gè)發(fā)現(xiàn)了“萬有引力”定律的牛頓說的。為什么要引用這兩句呢?是因?yàn)槲覄傞_始用vue的時(shí)候,使用的是vue-cli來搭建vue項(xiàng)目,快速又好用;我剛開始用react的時(shí)候,使用的是create-react-app來搭建react項(xiàng)目,方便又省事。使用這些已有的腳手架來搭建項(xiàng)目,無可厚非,對于新手來說,也確實(shí)能快速構(gòu)建,不做置評。

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、城步網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、購物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為城步等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

既然已經(jīng)有了這些現(xiàn)成的腳手架了,為什么我們還熱衷于自己來配置webpack來搭建構(gòu)建項(xiàng)目呢?因?yàn)槲覀冎挥辛私獠W(xué)會(huì)了配置webpack,我們才能更好地在打包構(gòu)建項(xiàng)目時(shí)將webpack的性能發(fā)揮到極致,才能根據(jù)自身項(xiàng)目的實(shí)際需求,配置有利于項(xiàng)目開發(fā)的各種工具、插件,提高我們的開發(fā)效率。比如我們在打包項(xiàng)目時(shí),可以分析哪些地方降低了webpack的打包速度,別人打包速度需要花去十多秒、二十多秒,而你能將打包的速度提升至幾秒,這就是你的優(yōu)勢。當(dāng)然,涉及到webpack的運(yùn)行原理以及開發(fā)自己的loader或plugin就可以自行去學(xué)習(xí)了哈,本文只帶你配置一個(gè)webpack來搭建一個(gè)vue項(xiàng)目。

wepack作為一個(gè)“模塊打包機(jī)”其實(shí)是依賴了龐大的插件體系,插件體系是webpack的核心,可以說,webpack的生態(tài)就是建立在眾多插件之上的,而開發(fā)環(huán)境和生產(chǎn)打包環(huán)境依賴的插件還是有所不同的,先以開發(fā)環(huán)境為例

webpack.config.js:

const path = require('path');
const Webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const ProgressBarPlugin = require('progress-bar-webpack-plugin');

const resolve = (dir) => {
 return path.join(__dirname, '..', dir)
}

const assetsPath = (_path) => {
 return path.join('static', _path)
}

const isEnvProduction = process.env.NODE_ENV == "production", port = 3003;

module.exports = {
 mode: 'development',
 devtool: 'source-map',
 entry: resolve('src'),
 output: {
  path: resolve('dist'),
  filename: isEnvProduction ? assetsPath('js/[name]-[hash].js') : '[name]-[hash].js',
  chunkFilename: isEnvProduction ? assetsPath('js/[name]-[chunkhash:5].min.js') : '[name]-[chunkhash:5].min.js',
  publicPath: '/',
 },
 resolve: {
  extensions: ['*', '.js', '.vue'], //webpack2.x extensions[0]不能為空 resolve屬性中的extensions數(shù)組中用于配置程序可以自行補(bǔ)全哪些文件后綴
  alias: {
   '@': resolve('src'),
   // 'vue$': 'vue/dist/vue.esm.js'
  },
 },
 //提取公共代碼
 optimization: {
  splitChunks: {
   cacheGroups: {
    commons: {
     test: /[\\/]node_modules[\\/]/, //表示默認(rèn)拆分node_modules中的模塊
     name: "vendor", //提取出來的文件命名
     chunks: "all",  //提取所有文件的公共部分
     minChunks: 2,   //表示提取公共部分最少的文件數(shù) 模塊被引用>=2次,拆分至vendors公共模塊
     minSize: 0,   //表示提取公共部分最小的大小 模塊超過0k自動(dòng)被抽離成公共模塊
    },
   }
  }
 },
 module: {
  rules: [
   {
    test: /\.vue$/,
    use: ['vue-loader'],
    exclude: /node_modules/,
   },
   {
    test: /\.js$/,
    loader: 'babel-loader',
    exclude: /node_modules/,
    query: {
     "presets": ["@babel/env"],
     "plugins":
      ["@babel/plugin-syntax-dynamic-import", "@babel/plugin-transform-runtime"],
    }
   },
   {
    test: /\.(sa|sc|c)ss$/,
    use: [
     MiniCssExtractPlugin.loader,
     'css-loader',
     'postcss-loader',
     'sass-loader',
    ],
   },
   {
    test: /\.(eot?.+|svg?.+|ttf?.+|otf?.+|woff?.+|woff2?.+)$/,
    use: 'file-loader?name=' + (isEnvProduction ? assetsPath('fonts/[name].[hash:8].[ext]') : 'fonts/[name].[hash:8].[ext]')
   },
   {
    test: /\.(jpg|jpeg|png|gif|ico|svg)$/,
    loader: 'url-loader',
    options: {
     limit: 10000,
     name: isEnvProduction ? assetsPath('images/[name].[hash:8].[ext]') : 'images/[name].[hash:8].[ext]',
    }
   },
  ],
 },
 plugins: [
  new ProgressBarPlugin(),
  new VueLoaderPlugin(),
  //ProvidePlugin是webpack的內(nèi)置模塊,使用ProvidePlugin加載的模塊在使用時(shí)將不再需要import和require進(jìn)行引入
  new Webpack.ProvidePlugin({
   _: 'lodash',
  }),
  new HtmlWebpackPlugin({
   template: './src/index.html', //文件路徑及名稱
   filename: 'index.html',   //輸出后的文件名稱
  }),
  new MiniCssExtractPlugin({
   filename: isEnvProduction ? assetsPath("css/[name]-[hash].css") : "css/[name]-[hash].css",
   chunkFilename: isEnvProduction ? assetsPath("css/[name]-[hash].css") : "css/[name]-[hash].css", //默認(rèn)就是取的以id或name為開頭的css,所以可以加這行配置代碼,也可以不加
  }),
 ],
 devServer: {
  port,
  host: '0.0.0.0',
  open: `http://localhost:${port}`,
  stats: {
   hash: false,
   builtAt: false,
   version: false,
   modules: false,
   children: false, ////解決類似Entrypoint undefined = index.html和Entrypoint mini-css-extract-plugin = *的警告
   entrypoints: false,
   colors: {
    green: '\u001b[32m',
    yellow: '\u001b[32m',
   }
  },
  proxy: {
   '/': {
    target: '',
    changeOrigin: true
   }
  },
  inline: true,
  compress: false,
  disableHostCheck: true,
  historyApiFallback: true,
 },
}

網(wǎng)站題目:使用webpack搭建vue項(xiàng)目及注意事項(xiàng)-創(chuàng)新互聯(lián)
分享鏈接:http://aaarwkj.com/article0/cccdio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)網(wǎng)站建設(shè)、外貿(mào)建站、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
日本人妻免费在线观看| 国产一区二区高清在线| 日本一区二区三区不卡在线| 日本免费观看一区久久| 最新国产情侣夫妻激情| 热精品韩国毛久久久久久| 久久精品国产亚洲熟女| 日本一本一道高清不卡视频| 不卡的视频在线观看| 少妇午夜福利一区二区| 欧美黄色日本一区二区| 乱色熟女一区二区三区| 久久热精品视频这里有| 国产亚洲一区二区三区日韩| 国产熟女碰碰人人a久久| 日本一道二区三区我不卡| 国产一级一片内射在线| 国产av高清亚洲精品高清二部| 国产一级内射在线视频| 国产一区免费二区三区四区 | 麻豆视频在线观看传媒| 欧美日韩精品一区二区在线| 亚洲男人天堂在线播放| 亚洲日本香蕉视频观看视频| 欧美成人夫妻性生活视频| 日韩亚洲人成网站在线播放| 精品亚洲av一区二区三区| 久久亚洲春色中文字幕| 理论三级麻豆国产在线| 97青青草免费在线视频| 午夜麻豆影网在线观看| 亚洲淫婷婷久久一区二区| 精品一区二区亚洲精品| 日韩久久精品五月综合| 欧美黄片网站在线观看| 国产精品亚洲精品久久| 国产男女视频免费观看| 国产精品粗又长一区| 亚洲乱码一区二区免费版| 亚洲日本香蕉视频观看视频| 一二三日韩电影在线观看|