webpack打包require.js

之前沒有接觸過webpack,甚至連它是什么都不知道讯蒲,在接觸requirejs后痊土,對webpack也起了興趣,于是讀了一篇webpack入門文章墨林,大致有了一些了解赁酝,現(xiàn)在對其進行總結,仍然從what,why,how這三個方面來總結旭等,最后做一下引申酌呆,來講解一下webpack如何打包require.js。

什么是webpack
webpack同reqiure.js一樣搔耕,都是模塊打包工具隙袁。但require.js只能將js打包,webpack能打包html,js,css等弃榨。webpack能分析項目結構菩收,找到瀏覽器不能直接運行的拓展語言,如less,scss鲸睛,打包成瀏覽器認識的語言并運行娜饵。

為什么使用
隨著互聯(lián)網(wǎng)時代的發(fā)展,前端也越來越豐富官辈,它們做出的應用各顯身手箱舞。在應用當中,或許擁有復雜的js代碼和各種依賴拳亿,為了簡化代碼晴股,前端出現(xiàn)了各種各樣的工具,如:less风瘦、scss等css預處理器队魏、模塊化公般、typescript等万搔。由于瀏覽器不識別,首先得將這些語言進行額外處理官帘,太過繁瑣瞬雹。webpack的出現(xiàn)恰好解決了這類問題。

如何使用
webpack功能其實很強大刽虹,經(jīng)過學習酗捌,只懂得了一些皮毛:打包js和css,其他的沒有涉獵。
· 安裝webpack
1.新建一個空的文件夾胖缤,在此文件夾打開命令行尚镰,全局安裝webpack,安裝完后會看到文件里多出來一個文件夾:node_modules

//命令行全局安裝
npm install -g webpack

2.在此文件夾創(chuàng)建文件package.json哪廓,使用命令初始化狗唉,初始化完后安裝webpack的依賴包。
后續(xù)再創(chuàng)建兩個文件夾app和index涡真,app里放js代碼分俯,index里放主要的html。再在根目錄下創(chuàng)建webpack.config.js
目錄結構如下(項目不一定按照此目錄來)哆料,main.js缸剪,webpack.config.js以及package.json是核心文件


目錄結構
//初始化
npm init
//安裝依賴包(指定版本)
npm install webpack@1.13.x --save-dev 
//或直接安裝最新版本的依賴包
npm install --save-dev webpack

注意:在初始化后,命令行會跳出來一些列問題用來填寫东亦,如下


初始化的問題

大部分直接默認敲回車就好了杏节,除了第一個package name,它默認是webpack典阵,為了避免之后安裝出現(xiàn)問題拢锹,package name可隨便填個。
初始化完后的package.json如下:


初始完成

3.在index.html文件中隨便寫個代碼萄喳,并引入打包后的js文件(這個文件不用創(chuàng)建)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Webpack Example</title>
  </head>
  <body>
    <div id='container'>
    </div>
    //引入打包后的文件卒稳,一般都命名為bundle.js,不過也無所謂
    <script src="bundle.js"></script> 
  </body>
</html>

再在app文件下創(chuàng)建hello.js他巨,寫個demo充坑,js需要按照commonJs模范來編寫

module.exports = function() {
  var div = document.createElement('div');
  div.textContent = "Hello World";
  return div;
};

在main.js將hello.js引入

const div = require('./hello.js');//引入
document.querySelector("#container").appendChild(div());

4.在webpack.config.js配置入口及出口

module.exports = {
  entry:  __dirname + "/app/main.js",//入口文件
  output: {
    path: __dirname + "/index",//打包后的文件存放的地方
    filename: "bundle.js"http://打包后輸出的文件
  }
}

注:“__dirname”是node.js中的一個全局變量,它指向當前執(zhí)行腳本所在的目錄

實現(xiàn)打包通常通過命令行來實現(xiàn)染突,這里用最簡單的一個方法npm start來實現(xiàn)打包
在第1個步驟捻爷,已經(jīng)將package.json初始化,在里面加上sciprts對象份企,進行設置

"scripts": {
    "start":"webpack"
  },

此時的package.json里面有這些內(nèi)容


image.png

再敲命令行npm start也榄,webpack就開始工作了,并在index目錄下自動生成打包文件bundle.js

image.png

此時運行index.html司志,就會出現(xiàn)hello world.

5.將css打包(與上述的文件目錄無關)

先將寫好的css文件甜紫,從入口引入

//main.js
import(文件路徑)

打包css用到的webpack兩個工具處理樣式表,css-loader和style-loader骂远。

css-loader可以使用@import和url(...)的方法實現(xiàn)reuire()的功能囚霸,style-loader將所有計算后的樣式加入頁面。(如果項目里用到less等類似預處理器激才,涉及樣式計算)

首先要安裝兩個工具

npm install --save-dev style-loader css-loader

其次在webpack.config.js配置相關屬性
在webpack2及以上的版本拓型,字段為:
module:{rules:[{test: ,use..},{test: ,user:,...}]
由于我配置的版本是1.13.2所以字段為:
module:{loadesr:[test: ,loader:]}额嘿。
起初不知道每個版本的字段配置不一樣,用的rules劣挫,結果命令出現(xiàn)錯誤册养。

配置好了之后,用npm start運行压固,結果報錯

錯誤

報的語法錯誤捕儒,需要一個額外的loader來處理這樣的文件格式。我在css有部分background使用了url屬性邓夕,此時需要另外一個工具url-loader來支撐刘莹,同樣,在webpack.config.js配置字段焚刚,下圖為完整字段


完整字段

然后再運行npm start点弯,問題完美解決.


引申:webpack打包require.js
項目的目錄結構

目錄結構

說明:script文件夾除了jquery.min.js,剩下的都是以amd格式定義的模塊矿咕,main.js是入口文件抢肛,也是require.js的核心文件;lib用來放打包后的文件碳柱;頁面為登錄頁面捡絮;

在沒有打包的時候,項目中index頁面莲镣,引入的是require.js福稳,打包就不用引入require.js了,按照webpack的方式引入打包后的文件

<script type="text/javascript" src="js/script/jquery.min.js"></script>
<script type="text/javascript" src='js/lib/index.js'></script>

這里我們看到瑞侮,除了配置打包后的文件的圆,還引入了jquery
因為我們編寫的模塊需要依賴jquery,所以將需要將jquery配制成全局的半火。
全局配置需要在webpack.config.js進行

module.exports = {
  entry: {
    index: './js/script/main.js'
  },
  output: {
    path: './js/lib/',
    filename: '[name].js',
    publicPath: './js/lib/'
  },
  externals:{
    jquery:"jQuery" //全局配置jquery
  },
  module: {
        loaders: [  
            {  
                test: /\.css$/,  
                loader: 'style-loader!css-loader'  
            },
            {
                test:/\.(jpg|png|jpeg|gif)$/,
                loader:'url-loader?limit=8192'
            }
        ]
    }
};

再在main.js引入

const $ = require("jquery");

那些自定義的模塊像addClass.js越妈,如果依賴jquery,只需在定義的時候?qū)query引入钮糖,否則會報錯梅掠。單純使用require.js的時候不需要引入,這是區(qū)別店归。


引入

再來看main.js阎抒,使用require.js的時候,我們引用自定義的模塊是這樣引用的

require(['mtWindow'],function(mtWindow){
    mtWindow.add("手機號格式錯誤");
})

require.js會幫我們處理好文件路徑娱节,所以只寫文件名即可挠蛉,不用寫完整的路徑
而用webpack祭示,需要將路徑填寫完整肄满,否則會報錯(也可能有指定根目錄的方法谴古,我不知道)

require(['./mtwindow.js'],function(mtWindow){
    mtWindow.mtWindow("手機號格式錯誤");
})

以上是我webpack的入門,像babel稠歉,loaders掰担,plugins都沒有寫,因為我也沒有細細學習這部分怒炸。后續(xù)學習带饱,會把這部分補上。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末阅羹,一起剝皮案震驚了整個濱河市勺疼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捏鱼,老刑警劉巖执庐,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異导梆,居然都是意外死亡轨淌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門看尼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來递鹉,“玉大人,你說我怎么就攤上這事藏斩□锝幔” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵狰域,是天一觀的道長窜觉。 經(jīng)常有香客問我,道長北专,這世上最難降的妖魔是什么禀挫? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮拓颓,結果婚禮上语婴,老公的妹妹穿的比我還像新娘。我一直安慰自己驶睦,他們只是感情好砰左,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著场航,像睡著了一般缠导。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上溉痢,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天僻造,我揣著相機與錄音憋他,去河邊找鬼。 笑死髓削,一個胖子當著我的面吹牛竹挡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播立膛,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼揪罕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了宝泵?” 一聲冷哼從身側響起好啰,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎儿奶,沒想到半個月后坎怪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡廓握,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年搅窿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隙券。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡男应,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娱仔,到底是詐尸還是另有隱情沐飘,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布牲迫,位于F島的核電站耐朴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盹憎。R本人自食惡果不足惜筛峭,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望陪每。 院中可真熱鬧影晓,春花似錦、人聲如沸檩禾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盼产。三九已至饵婆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間戏售,已是汗流浹背侨核。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工草穆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芹关。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓续挟,卻偏偏與公主長得像紧卒,于是被迫代替她去往敵國和親侥衬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

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