Webpack初始化&配置

初始化webpack項(xiàng)目
1. 在當(dāng)前位置創(chuàng)建一個空目錄  $ mkdir webpack-demo(目錄名)
2. cd webpack-demo 目錄,初始化一個package.json   $ npm init
3. 安裝'webpack'與'webpack-cli' $ npm install webpack webpack-cli -D
4. 創(chuàng)建入口js文件與html文件溺森,$ npm touch index.html src/index.js
5. 創(chuàng)建webpack.config.js文件 $ touch webpack.config.js

npx 執(zhí)行依賴包里的二進(jìn)制文件, 在 npm version >= 5.2.0 開始,默認(rèn)安裝了npx
如:可以直接通過npx webpack命令執(zhí)行編譯打包宏多,
不需要用到./node_modules/.bin/webpack -v

// webpack.config.js 是webpack自身定義的默認(rèn)配置文件名儿惫,會覆蓋webpack的默認(rèn)配置項(xiàng)
// webpack默認(rèn)只能識別JS模塊,其他模塊是不識別的, loader就是幫助webpack來識別并解析除了JS的其他模塊的, loader的配置主要在module.rules中進(jìn)行
//loader的主要作用 1.識別文件類型伸但,確定具體處理該模塊的loader (rule.test) 2.使用對應(yīng)的loader, 對文件進(jìn)行相關(guān)操作轉(zhuǎn)換 (rule.use)

const path = require('path')

const HtmlWebpackPlugin = require('html-webpack-plugin')
/**1.為html文件中引入的外部資源每次更新后的hash肾请,防止引用緩存的外部文件問題 
 * 2.可以生成創(chuàng)建html入口文件,比如單頁面會生成一個html文件入口更胖,如果配置多個html-webpack-plugin即可生成多個頁面入口**/

const { CleanWebpackPlugin } = require('clean-webpack-plugin') // 清理dist文件夾
const MiniCssExtractPlugin = require('mini-css-extract-plugin') // 將分離css插件铛铁,用于生產(chǎn)環(huán)境, 若開發(fā)環(huán)境用的話,就無法樣式模塊熱更新
module.exports = {
    entry: {
        main: './src/index.js' //入口文件
    },
    output: { // 輸出文件配置
        filename: 'bundle.js', // 輸出文件名
        path: path.resolve(__dirname, 'dist') // output的path需要絕對路徑却妨,使用node.js的path模塊來解析為絕對路徑
    },
    mode: "development",
    devServer: {
        contentBase: './dist', // 啟動的目錄
        open: false, // 自動打開瀏覽器
        proxy: { // 設(shè)置代理饵逐,解決跨域請求問題
            "/api": {
                target: "http://127.0.0.1:5500"
            }
        },
        port: 8088, // 指定端口號
        hot: true, // 開啟HMR(Hot Module Replacement) 熱模塊替換,由于是webpack自帶的彪标,所以要引入webpack, 監(jiān)控并更新js模塊的工作vue等框架自己做了倍权,否則需要自己拖動監(jiān)控
        // hotOnly: true 在某些模塊不支持熱更新的情況下,不會刷新頁面捞烟,只在控制臺輸出熱更新失敗
        before(app, server, compiler) { // 當(dāng)html發(fā)生改變時薄声,重新加載頁面
            const watchFiles = ['.html'];
            compiler.hooks.done.tap('done', () => {
                const changedFiles = Object.keys(compiler.watchFileSystem.watcher.mtimes);
                if (
                    this.hot &&
                    changedFiles.some(filePath => watchFiles.includes(path.parse(filePath).ext))
                 ) {
                    server.sockWrite(server.sockets, 'content-changed');
                 }
            })
        }
    },

    // 非js模塊的配置
    module: {
        rules: [
            {
                test: /\.(jpe?g|png|git)$/,
                use: {
                    loader: "url-loader",
                    options: {
                        name: "[name]-[hash:7].[ext]", // []表示占位符(placeholder)当船,name表示源文件的名字,ext是源文件的后綴默辨,還可以連接hash: [name]-[hash].[ext]
                        outputPath: "images", // 輸出的圖片文件夾
                        limit: 10000 // 限制當(dāng)圖片小于10000以下德频,將圖片轉(zhuǎn)化為base64
                    }
                }
            },
            {
                test: /\.css$/,
                use: [
                    // 執(zhí)行順序:由下至上,由右至左
                    'style-loader', // 把合并后的css直接放在頁面的style樣式上
                    // {
                    //     loader: MiniCssExtractPlugin.loader
                    // }, // 將css分離出來
                    'css-loader' // 合并css
                ]
            },
            {
                test: /\.scss$/,
                use: [
                    'style-loader',
                    // {
                    //     loader: MiniCssExtractPlugin.loader
                    // }, // 將css分離出來
                    'css-loader',
                    'sass-loader', // 將sass轉(zhuǎn)化為css缩幸,依賴node-sass模塊(npm i sass-loader node-sass -D)
                    'postcss-loader' // 自動添加需要前綴的樣式, 還需安裝autoprefixer依賴包
                ]
            }
        ]
    },
    // plugins壹置,是用于擴(kuò)展webpack的功能,本身是一個類表谊,通過在構(gòu)造函數(shù)中傳入不同參數(shù)實(shí)現(xiàn)不同功能, 數(shù)組里面的項(xiàng)即是插件的實(shí)例
    plugins: [
        // 執(zhí)行順序由上至下
        new CleanWebpackPlugin({
            cleanOnceBeforeBuildPatterns: [path.join(__dirname, "dist")]
        }),
        
        new HtmlWebpackPlugin({ // 自動生成html并打包至輸出的目錄中
            title: 'html模板',
            filename: 'index.html',
            template: "./index.html"
        }),
        new MiniCssExtractPlugin({ // 將css分離出來
            filename: '[name].css',        // 輸出文件名 
            chunkFilename: '[id].css',            // 模塊名
        })
    ],
    devtool: 'cheap-module-eval-source-map' // 用于開發(fā)環(huán)境钞护,打包后的文件與源碼的映射文件,打包后在dist文件夾中會多出后綴為map的映射文件铃肯,方便定位到具體錯誤所在患亿,解決問題传蹈,
}
// 使用postcss-loader需要在根目錄添加一個文件 $mkdir postcss.config.js
module.exports = {
    plugins: [
        require('autoprefixer')
    ]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末押逼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惦界,更是在濱河造成了極大的恐慌挑格,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沾歪,死亡現(xiàn)場離奇詭異漂彤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灾搏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門挫望,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人狂窑,你說我怎么就攤上這事媳板。” “怎么了泉哈?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵蛉幸,是天一觀的道長。 經(jīng)常有香客問我丛晦,道長奕纫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任烫沙,我火速辦了婚禮匹层,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锌蓄。我一直安慰自己升筏,他們只是感情好仲器,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仰冠,像睡著了一般乏冀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上洋只,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天辆沦,我揣著相機(jī)與錄音,去河邊找鬼识虚。 笑死肢扯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的担锤。 我是一名探鬼主播蔚晨,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼肛循!你這毒婦竟也來了铭腕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤多糠,失蹤者是張志新(化名)和其女友劉穎累舷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夹孔,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡被盈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搭伤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片只怎。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怜俐,靈堂內(nèi)的尸體忽然破棺而出身堡,到底是詐尸還是另有隱情,我是刑警寧澤佑菩,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布盾沫,位于F島的核電站,受9級特大地震影響殿漠,放射性物質(zhì)發(fā)生泄漏赴精。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一绞幌、第九天 我趴在偏房一處隱蔽的房頂上張望蕾哟。 院中可真熱鬧,春花似錦、人聲如沸谭确。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽逐哈。三九已至芬迄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昂秃,已是汗流浹背禀梳。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓撒蟀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親熄阻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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