在es6模塊中怎么引入傳統(tǒng)的jQuery和jQuery插件呢伤靠?

1域那、安裝webpack和loader

為什么要安裝webpack? 因為我們要用到webpack的 expose-loader。當(dāng)然,webpack的打包功能我們也要用到产还。

mkdir demo-webpack && cd demo-webpack
npm init
cnpm install webpack webpack-cli --save-dev
cnpm install expose-loader -D
cnpm install --save jquery

上面的命令,我們創(chuàng)建并初始化了一個demo-webpack項目,然后安裝了
webpack webpack-cli expose-loader jquery

注意jquery是--save的俗他,webpack打包的時候會把jquery也打包到bundle.js

2、新建webpack.config.js

const path = require('path');

module.exports = {
    mode:"development",
    entry:"./src/main.js",
    output:{
       path: path.resolve(__dirname, 'dist'),
       filename:"bundle.js"
    },
    module:{
        rules: [
            {
                test: require.resolve('jquery'),
                use: [
                    {
                        loader: 'expose-loader',
                        options: '$'
                    },
                    {
                        loader: 'expose-loader',
                        options: 'jQuery'
                    }
                ]
            }
        ]
    }
}

注意: require.resolve('jquery')下面會解釋

3阔逼、新建src文件夾和main.js(webpack配置文件中的入口文件)

import 'jquery';
import '../public/plugin/banner/js/velocity'
import '../public/plugin/banner/js/shutter'


$(function () {
    $('.shutter').shutter({
        shutterW: 2560, // 容器寬度
        shutterH: 1080, // 容器高度
        isAutoPlay: true, // 是否自動播放
        playInterval: 3000, // 自動播放時間
        curDisplay: 0, // 當(dāng)前顯示頁
        fullPage: false // 是否全屏展示
    });
});

當(dāng)webpack構(gòu)建時兆衅,遇到import 'jquery';,就會告訴expose-loader處理。

第2步創(chuàng)建的webpack配置文件中的這句話require.resolve('jquery'),意思就是 當(dāng)檢測到 import jquery 或者 require('jquery') 時,就把jquery的返回值(這里用返回值描述可能不正確)暴露給window.$或者window.jQuery嗜浮。結(jié)果jQuery對象就綁定到全局window對象上了羡亩。

當(dāng)然,既然在這里已經(jīng)綁定到window上了危融,那在其他模塊里面就不需要再通過import jQuery導(dǎo)入jQuery了畏铆。直接使用即可。

我們在這里(main.js)導(dǎo)入了一個jquery的輪播插件shutter.js吉殃,直接使用就好辞居。

4、修改package.json,添加一個腳本蛋勺,用于執(zhí)行webpack打包命令

"scripts": {
    "webpack": "webpack --progress --display-modules --colors --watch",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

5瓦灶、執(zhí)行npm run webpack
若沒錯誤,即可生成 dist\bundle.js

6迫卢、在頁面里引入這個bundle.js就行了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>演示</title>

    <link rel="stylesheet" href="../public/plugin/banner/css/shutter.css">
</head>
<body>
        
    <div class="shutter">
        <div class="shutter-img">
        <a href="#" data-shutter-title="Iron Man"><img src="../public/img/河南大屏1.jpg" alt="#"></a>
        <a href="#" data-shutter-title="Super Man"><img src="../public/img/河南大屏2.jpg" alt="#"></a>
        <a href="#" data-shutter-title="The Hulk"><img src="../public/img/河南大屏3.jpg" alt="#"></a>
        <a href="#" data-shutter-title="The your"><img src="../public/img/河南大屏4.jpg" alt="#"></a>
        <a href="#" data-shutter-title="The your"><img src="../public/img/河南大屏 5.jpg" alt="#"></a>
        </div>
        <ul class="shutter-btn">
        <li class="prev"></li>
        <li class="next"></li>
        </ul>
        <div class="shutter-desc">
        <!-- <p>Iron Man</p> -->
        </div>
    </div>

    <script src="../dist/bundle.js"></script>
</body>
</html>

引入babel 編譯es6語法

我們在main.js中加入這樣一句lamda表達(dá)式
export const calculator = num => num * num; 然后倚搬,執(zhí)行npm run webpack
用IE11打開index.html會發(fā)現(xiàn)報錯了(chrome和firefox等現(xiàn)代瀏覽器不報錯)

為了解決這個錯誤,我們需要引入babel 和 babel-polyfill

1乾蛤、安裝babel依賴 cnpm install babel-loader babel-core babel-preset-env --save-dev

2每界、在webpack.config.js中增加規(guī)則:

module:{
    rules: [
        {
            test: /\.js$/,
            exclude: /(node_modules|bower_components)/,
            use: {
                loader: 'babel-loader',
                options: {
                    presets: ['env']
                }
            }
        }
    ]
}

babel-polyfill官方:https://babeljs.io/docs/en/babel-polyfill

現(xiàn)在再打包一次捅僵,刷新一下IE瀏覽器,錯誤已經(jīng)沒有了眨层。

當(dāng)需要用到更新穎的es6語法時庙楚,需要引入babel-polyfill (安裝babel-polyfill是為了‘墊’出一個環(huán)境)

3、安裝 babel-polyfill cnpm install --save babel-polyfill: 注意不是 --save-dev

4趴樱、在入口文件(main.js)的頂部導(dǎo)入 import "babel-polyfill";或者下一步

5馒闷、With webpack.config.js, add babel-polyfill to your entry array:
entry: ["babel-polyfill", "./src/main.js"]

步驟4、5不加好像也行

在模塊里引入css文件

我們在index.html里引入了一個css文件

<link rel="stylesheet" href="../public/plugin/banner/css/shutter.css">

現(xiàn)在我們要把它打包到bundle.js里叁征,所以在main.js里導(dǎo)入它
import '../public/plugin/banner/css/shutter.css' 同時注釋掉
<link rel="stylesheet" href="../public/plugin/banner/css/shutter.css">

1纳账、只是這樣還不行,我們還需要安裝三個loader style-loader css-loader url-loader

cnpm install --save-dev style-loader  css-loader  url-loader

style-loader 是把打包好的css插入到html頁面中的
url-loader: 因為圖片中引用了圖片路徑捺疼,所以需要它處理

2疏虫、在webpack.config.js中增加這幾條規(guī)則

{
    test: /\.css$/,
    use: ['style-loader','css-loader']
},
{
    test: /\.(png|jpg|gif)$/,
    use: [
        {
            loader: 'url-loader',
            options: {
                limit: 8192
            }
        }
    ]
},

重新運行 npm run webpack ,打開頁面啤呼,一切正常

使用 HtmlWebpackPlugin 插件

我們打包出來的dist目錄只有一個bundle.js,而我們的index.html是在src目錄下的卧秘。
現(xiàn)在我想把index.html也打包到dist目錄,這樣我發(fā)布的時候只需要拷貝dist就行了官扣。
(如果現(xiàn)在發(fā)布翅敌,需要打包dist、src惕蹄、public-圖片)

1蚯涮、安裝插件 cnpm install --save-dev html-webpack-plugin

2、修改webpack.config.js

//在文件頂部增加
var HtmlWebpackPlugin = require('html-webpack-plugin');

//然后再增加
plugins: [
    new HtmlWebpackPlugin({
        title:"webpack自動演示系統(tǒng)",
        template:"./src/index.html"
    })
]

3焊唬、修改index.html的title

<title><%= htmlWebpackPlugin.options.title %></title>

4恋昼、執(zhí)行打包,index.html就拷貝到dist\index.html了

怎么把html中引入的圖片打包到dist目錄赶促?

<a href="#" data-shutter-title="Iron Man"><img src="../public/img/河南大屏1.jpg" alt="#"></a>

使用html-loader:

網(wǎng)上很多人說用 html-withimg-loader,我試了是可以的液肌,但是還是用官方的html-loader吧!

1鸥滨、安裝 cnpm install -D html-loader file-loader
html-loader 依賴file-loader,如果不安裝file-loader嗦哆,打包的時候會報錯的。

2婿滓、增加配置

{
    test: /\.(html)$/,
    use: {
        loader: 'html-loader',
        options: {
            attrs: ['img:src']
        }
    }
},

同時修改一下圖片處理的loader

{
    test: /\.(png|jpg|gif)$/,
    use: [
        {
            loader: 'url-loader',
            options: {
                limit: 8192,
                name: 'img/[hash:8].[name].[ext]'
            }
        }
    ]
}

增加了一行 name: 'img/[hash:8].[name].[ext]' 主要是為了打包后生成的圖片名稱美觀一點老速,默認(rèn)是一串16進(jìn)制的字符串。

3凸主、npm run webpack ,查看dist/index.html里圖片鏈接已變成 img/***.jpg了

怎么把html中引入的視頻也打包到dist目錄橘券?

和上面一樣,不過要修改一下html-loader(增加video:src),同時增加一個url-loader檢測mp4文件

{
    test: /\.(html)$/,
    use: {
        loader: 'html-loader',
        options: {
            attrs: ['img:src', 'video:src']
        }
    }
},
{
    test:/\.(mp4)$/,
    use:[
        {
            loader:"url-loader",
            options:{
                limit:10000,
                name:'video/[name].[ext]'
            }
        }
    ]
}

如果頁面中有 <video id="centerVideo" src="../static/img/centervideo.mp4" controls autoplay loop></video> ,那么打包后的 src地址也會被修改。

安裝 clean-webpack-plugin

clean-webpack-plugin 用于清理文件

1旁舰、npm install --save-dev clean-webpack-plugin

2锋华、

const CleanWebpackPlugin = require('clean-webpack-plugin');

plugins: [
    new CleanWebpackPlugin(['dist'])
],

這是我的示例代碼【歡迎訪問】: gitee: demo-webpack

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市箭窜,隨后出現(xiàn)的幾起案子毯焕,更是在濱河造成了極大的恐慌,老刑警劉巖磺樱,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纳猫,死亡現(xiàn)場離奇詭異,居然都是意外死亡竹捉,警方通過查閱死者的電腦和手機(jī)芜辕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來活孩,“玉大人物遇,你說我怎么就攤上這事『度澹” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵乃沙,是天一觀的道長起趾。 經(jīng)常有香客問我,道長警儒,這世上最難降的妖魔是什么训裆? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蜀铲,結(jié)果婚禮上边琉,老公的妹妹穿的比我還像新娘。我一直安慰自己记劝,他們只是感情好变姨,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厌丑,像睡著了一般定欧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怒竿,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天砍鸠,我揣著相機(jī)與錄音,去河邊找鬼耕驰。 笑死爷辱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饭弓,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼双饥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了示启?” 一聲冷哼從身側(cè)響起兢哭,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夫嗓,沒想到半個月后迟螺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡舍咖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年矩父,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片排霉。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡窍株,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攻柠,到底是詐尸還是另有隱情球订,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布瑰钮,位于F島的核電站冒滩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浪谴。R本人自食惡果不足惜开睡,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苟耻。 院中可真熱鬧篇恒,春花似錦、人聲如沸凶杖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官卡。三九已至蝗茁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寻咒,已是汗流浹背哮翘。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留毛秘,地道東北人饭寺。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓阻课,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艰匙。 傳聞我的和親對象是個殘疾皇子限煞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

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