vue + webpack 項(xiàng)目搭建

一屉佳、初始化項(xiàng)目
  1. 創(chuàng)建項(xiàng)目文件夾
  2. 初始化
    • 執(zhí)行命令 npm init
二谷朝、安裝依賴(lài)
  1. 安裝 webpack 相關(guān)依賴(lài)

    npm i webpack webpack-cli webpack-dev-server -D
    
  2. 安裝 vue 相關(guān)依賴(lài)

    npm i vue -S;
    npm i vue-loader vue-style-loader vue-template-compiler vue-hot-reload-api -D
    
  3. 安裝 JS ES6 新語(yǔ)法 處理 相關(guān)依賴(lài)

    npm i babel-loader @babel/preset-env @babel/core @babel/plugin-transform-runtime @babel/preset-es2015 -D
    
    • 配置 .babelrc 文件 或 babel.config.js 文件, 配置babel

      {
          "presets": ["@babel/preset-env"],
          "plugins": ["@babel/plugin-transform-runtime"],
          "comments":false
      }
      
  4. 安裝 樣式處理 相關(guān)依賴(lài)

    npm i style-loader css-loader -D
    
  5. 安裝 其它依賴(lài)

    npm i webpack-merge -D;
    npm i cross-env -D;
    npm i html-webpack-plugin -D
    npm i clean-webpack-plugin -D
    
    • webpack-merge:用來(lái)合并配置文件
    • cross-env:設(shè)置當(dāng)前執(zhí)行環(huán)境的插件
    • mini-css-extract-plugin:將 css 代碼分離出來(lái)武花,方便緩存圆凰,生產(chǎn)環(huán)境下使用
    • clean-webpack-plugin:每次打包后清除 dist 文件
三、代碼編寫(xiě)
  • 根目錄下創(chuàng)建 index.html

    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8">
        <title>webpack + vue</title>
      </head>
      <body>
        <div id="app"></div>
      </body>
    </html>
    
  • 根目錄下創(chuàng)建 src 文件夾

  • src 目錄下 創(chuàng)建 index.js

    import Vue from 'vue'
    import App from './app.vue'
    
    new Vue({
      el: "#app",
      render: h => h(App)
    })
    
  • src 目錄下 創(chuàng)建 app.vue

    <template>
      <div>
        Hello,{{name}}
      </div>
    </template>
    <script>
    export default {
      data () {
        return {
          name: 'vue'
        }
      }
    }
    </script>
    <style scoped>
      div {
        font-size: 18px;
        color: blue;
      }
    </style>
    
四体箕、webpack 配置
  • 公用配置:webpack.config.base.js

    const path = require('path')
    const { VueLoaderPlugin } = require('vue-loader')
    const HtmlWebpackPlugin = require('html-webpack-plugin')
    module.exports = {
      entry: './src/index.js',
      output: {
        filename: 'bundle.js',
        path: path.join(__dirname, '../dist'),
        publicPath: './'
      },
      mode: process.env.NODE_ENV,
      module: {
        rules: [
          {
            test: /\.vue$/,
            loader: 'vue-loader',
            include: [
              path.resolve(process.cwd(), 'src'),
            ]
          },
          {
            test: /\.js/,
            loader: 'babel-loader',
            exclude: /node_modules/
          }
        ]
      },
      plugins: [
        new VueLoaderPlugin(),
        new HtmlWebpackPlugin({
          template: './index.html',
          filename: './index.html',
          inject: 'false',
          minify: {
            removeComments: true 
          }
        })
      ]
    }
    
  • 生產(chǎn)環(huán)境:webpack.config.dev.js

    const base = require('./webpack.config.base.js')
    const { merge } = require('webpack-merge')
    const webpack = require('webpack')
    
    module.exports = merge(base, {
      devServer: {
        port: 8089,
        host: '127.0.0.1',
        publicPath: '/',
        open: true,
        hot: true,
        overlay: {errors: true}
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: ['style-loader', 'css-loader']
          }
        ]
      },
      plugins: [
        new webpack.HotModuleReplacementPlugin()
      ]
    })
    
  • 開(kāi)發(fā)環(huán)境:webpack.config.pro.js

    const base = require('./webpack.config.base')
    const { merge } = require('webpack-merge')
    const MiniCssExtractPlugin = require('mini-css-extract-plugin')
    const { CleanWebpackPlugin } = require('clean-webpack-plugin')
    
    module.exports = merge(base, {
      output: {
        filename: 'js/[name][hash].js',
        chunkFilename: 'js/vendor[id][hash].js',
      },
      optimization: {
        splitChunks: {
          cacheGroups: {
            styles: {
              name: 'styles',
              test: /\.css$/,
              chunks: 'all',
              enforce: true,
            },
            vendor: {
              test: /node_modules/,
              name: 'vendor',
              chunks: 'all'
            }
          }
        }
      },
      module: {
        rules: [
          {
            test: /\.css$/,
            use: [
              { loader: MiniCssExtractPlugin.loader },
              'css-loader'
            ]
          }
        ]
      },
      plugins: [
        new MiniCssExtractPlugin({ filename: 'css/[hash].css' }),
        new CleanWebpackPlugin()
      ]
    })
    
五专钉、啟動(dòng)服務(wù)
  1. 配置: 在 package.json 中配置

    "scripts": {
        "dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.dev.js",
        "build": "cross-env NODE_ENV=production webpack --config ./build/webpack.config.pro.js "
      }
    
    • dev:開(kāi)發(fā)環(huán)境,起服務(wù)
    • build:生產(chǎn)環(huán)境累铅,打包
  2. 啟動(dòng)服務(wù)

    • 開(kāi)發(fā)環(huán)境:npm run dev
    • 生產(chǎn)環(huán)境:npm run build
六跃须、開(kāi)發(fā)環(huán)境最終效果
webpack+vue 效果展示.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市娃兽,隨后出現(xiàn)的幾起案子菇民,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件第练,死亡現(xiàn)場(chǎng)離奇詭異阔馋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)复旬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)垦缅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人驹碍,你說(shuō)我怎么就攤上這事》不校” “怎么了志秃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嚼酝。 經(jīng)常有香客問(wèn)我浮还,道長(zhǎng),這世上最難降的妖魔是什么闽巩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任钧舌,我火速辦了婚禮,結(jié)果婚禮上涎跨,老公的妹妹穿的比我還像新娘洼冻。我一直安慰自己,他們只是感情好隅很,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布撞牢。 她就那樣靜靜地躺著,像睡著了一般叔营。 火紅的嫁衣襯著肌膚如雪屋彪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天绒尊,我揣著相機(jī)與錄音畜挥,去河邊找鬼。 笑死婴谱,一個(gè)胖子當(dāng)著我的面吹牛蟹但,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勘究,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矮湘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了口糕?” 一聲冷哼從身側(cè)響起缅阳,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后十办,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秀撇,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年向族,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呵燕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡件相,死狀恐怖再扭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情夜矗,我是刑警寧澤泛范,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站紊撕,受9級(jí)特大地震影響罢荡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜对扶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一区赵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浪南,春花似錦笼才、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至喷众,卻和暖如春各谚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背到千。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工昌渤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人憔四。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓膀息,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親了赵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子潜支,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容