webpack02

Webpack 是當下最熱門的前端資源模塊化管理和打包工具。它可以將許多松散的模塊按照依賴和規則打包成符合生產環境部署的前端資源。還可以將按需加載的模塊進行代碼分隔,等到實際需要的時候再異步加載。通過 loader 的轉換,任何形式的資源都可以視作模塊,比如 CommonJs 模塊、 AMD 模塊、 ES6 模塊、CSS、圖片、 JSON、Coffeescript、 LESS 等。

webpack.config.js的基本配置

webpack.config.js的基本形式:

var webpack = require('webpack')
var path = require('path');

module.exports = {
    entry: {
        index: ['./src/script/main.js', './src/script/a.js'] 
    },
    output: {
        path: '/home/xin/桌面/learning-records/09-webpack/demo04/dist/js',
        filename: 'bundle.js'
    }
 }  
  • entry:entry指示了哪些文件需要打包,它有三種使用方式

    1. 打包一個文件  (1 to 1)
    entry: "./src/script/main.js",
    2. 打包多個文件到一起 (n to 1)
    entry: ["./src/script/main.js", "./src/script/a.js"],
    3. 打包多個文件到不同的輸出文件 (n to n),適用于多頁面應用
    entry: {
        main: ["./src/script/main.js", "./src/script/a.js"], //這部分表示將main.js和a.js打包到一起
        a: "./src/script/a.js",
        b: "./src/script/b.js",
        c: "./src/script/c.js"
    },
    // 這里main、a、b、c是chunk name,其后的js文件即為chunk
  • output: 指定了打包文件的輸出相關配置(路徑、文件名)
將文件打包輸出到path目錄下的index.js
output: {
        // 在webpack2中,輸出路徑必須使用絕對路徑
        path: '/home/xin/桌面/learning-records/09-webpack/demo04/dist',
        filename: 'index.js',
    },
但是,如果要打包不同的文件并輸出到不同的文件該如何操作?

這時應該在filename中使用[name] [hash] [chunkhash]來確保生成輸出到不同的文件:

[name] 會被chunk的名稱所替換(chunk就是entry中的“鍵”)

[hash] is replaced by the hash of the compilation.

[chunkhash] is replaced by the hash of the chunk.

entry: {
        main: ["./src/script/main.js", "./src/script/a.js"], //這部分表示將main.js和a.js打包到一起
        a: "./src/script/a.js",
        b: "./src/script/b.js",
        c: "./src/script/c.js"
    },
output: {
        path: '/home/xin/桌面/learning-records/09-webpack/demo04/dist',
        filename: 'js/[name]-[chunkhash].js',
    },

運行 webpack(全局安裝webpack的前提下),就可以得到如下結果

image

如果只是局部安裝webpack,可以在項目的package.json中的script進行配置


image

這樣,只需運行npm run build就可以間接運行webpack命令了

使用webpack插件

  • html-webpack-plugin:是一個簡化生成HTML文件的webpack插件

安裝:npm install html-webpack-plugin --save-dev

使用插件:在webpack.config.js中進行配置
var webpack = require('webpack')
var path = require('path');
// 建立對插件的引用
var htmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: {
        main: ["./src/script/main.js", "./src/script/a.js"], 
        a: "./src/script/a.js",
        b: "./src/script/b.js",
        c: "./src/script/c.js"
    },
    output: {
        path: '/home/xin/桌面/learning-records/09-webpack/demo04/dist',
        filename: 'js/[name]-[chunkhash].js',
    },
    // plugins是一個數組,用來對插件進行配置
    plugins: [
    new htmlWebpackPlugin({
        // 這里的路徑指的是根目錄下的index.html,但是生成的a.html是在output指定的path路徑下
        template: 'index.html',
        // 以index.html(webpack.config.js目錄下的index.html)為模版,生成output指定路徑下的a.html
        filename: 'a.html', 
        // 指定腳本位置 可選值: 'head',' body',false (false表示不指定,腳本位置由html模版決定)
        inject: "body",
        // 在這里傳入參數,在模板中進行引用,動態操控生成文件的內容
        title: 'this is a', // 傳入title參數
        // 使用chunks參數來指定生成的頁面包含哪些js文件
        chunks: ['main', 'a'],
    }),]
}

webpack.config.js所在目錄下的index.html(模版文件)

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

<head>
    <meta charset="UTF-8">
    <title>
        <%= htmlWebpackPlugin.options.title %>
    </title>
</head>
<body>
</body>
</html>

運行webpack或者npm run build 在 output 中path指定的目錄下,生成a.html

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

<head>
    <meta charset="UTF-8">
    <title>
        this is a
    </title>
</head>
<body>
<script src="./js/a-9388e1025928badd3d0f.js"></script>
<script src="./js/main-10b93226146a0df34553.js"></script>
</body>
</html>

上面的例子中提到過,plugins是一個數組,用來對插件進行配置。但是上面的例子中,plugins中只有一項,該項只能對一個html文件進行配置,如果需要對多個html文件進行配置,則需要往plugins數組中添加多個插件

var webpack = require('webpack')
var path = require('path');
// 建立對插件的引用
var htmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
    entry: {
        main: "./src/script/main.js",
        a: "./src/script/a.js",
        b: "./src/script/b.js",
        c: "./src/script/c.js"
    },
    output: {
       
        path: path.resolve(__dirname, './dist'),
     
        filename: 'js/[name]-[chunkhash].js',
    },
 
    // 注意:plugins是一個數組,可以生成多個插件用來處理多個文件(構建多個html頁面)
    plugins: [
       // 利用一個html模版,根據要求生成多個HTML文件
        new htmlWebpackPlugin({
            filename: 'a.html', 
            template: 'index.html',
            inject: "body",
            title: 'this is a',
            chunks: ['main', 'a'],
        }),
        new htmlWebpackPlugin({
            filename: 'b.html', 
            template: 'index.html',
            inject: "body",
            title: 'this is b', // 傳入title參數
            chunks: ['b'],
        }),
        new htmlWebpackPlugin({
            filename: 'c.html',
            template: 'index.html',
            inject: "body",
            title: 'this is c', // 傳入title參數   
            chunks: ["c"],
        })
    ]
}

如何在項目中使用jQuery?

  • 安裝jQuery到項目中:npm install jquery --save-dev
  • 在需要使用jQuery的模塊中中直接require:var $ = require('jquery');
  • 這樣就可以在當前模塊中使用jQuery了

或者,在對應的HTML頁面中,使用script標簽,引入jQuery,這樣,在對應的頁面就可以使用jQuery了

loader

主要是處理資源的
postcss-loader用于css后處理,autoprefixer

{
test: /.css$/,
loader: 'style-loader!css-loader
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容

  • GitChat技術雜談 前言 本文較長,為了節省你的閱讀時間,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,705評論 7 110
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,214評論 7 35
  • 在現在的前端開發中,前后端分離、模塊化開發、版本控制、文件合并與壓縮、mock數據等等一些原本后端的思想開始...
    Charlot閱讀 5,464評論 1 32
  • 最愛圖集 舟山...
    少女與詩閱讀 177評論 0 0
  • W先生: 你好!今天北京下雨了,不錯,而且這周幾乎都有雷雨,清涼一下唄。 今天出去談一個項目,感覺...
    趙卓然閱讀 168評論 0 1