亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

webpack學習--webpack經典7分鐘入門教程

2019-11-19 16:13:42
字體:
來源:轉載
供稿:網友

一.什么是 Webpack

Webpack 是一個模塊打包器。它將根據模塊的依賴關系進行靜態分析,然后將這些模塊按照指定的規則生成對應的靜態資源。

webpack模式圖

二.為什么使用webpack

市面上已經存在的模塊管理和打包工具并不適合大型的項目,尤其單頁面 Web 應用程序。最緊迫的原因是如何在一個大規模的代碼庫中,維護各種模塊資源的分割和存放,維護它們之間的依賴關系,并且無縫的將它們整合到一起生成適合瀏覽器端請求加載的靜態資源。而webpack有以下幾個優點:

1.將依賴樹拆分成按需加載的塊:Webpack 有兩種組織模塊依賴的方式,同步和異步。異步依賴作為分割點,形成一個新的快。在優化了依賴樹后,每一個異步區塊都作為一個文件被打包。

2.初始化加載的耗時盡量少:Webpack 使用異步 I/O 和多級緩存提高運行效率,這使得 Webpack 能夠以令人難以置信的速度快速增量編譯。

3.各種靜態資源都可以視作模塊:Webpack 本身只能處理原生的 JavaScript 模塊,但是 loader 轉換器可以將各種類型的資源轉換成 JavaScript 模塊。這樣,任何資源都可以成為 Webpack 可以處理的模塊。

4.將第三方庫整合成模塊的能力:Webpack 有一個智能解析器,幾乎可以處理任何第三方庫,無論它們的模塊形式是 CommonJS、 AMD 還是普通的 JS 文件。甚至在加載依賴的時候,允許使用動態表達式 require("./templates/" + name + ".jade")。

5.自定義打包邏輯的能力:Webpack 還有一個功能豐富的插件系統。大多數內容功能都是基于這個插件系統運行的,還可以開發和使用開源的 Webpack 插件,來滿足各式各樣的需求。

6.適合大項目,無論是單頁還是多頁的 Web 應用

三.安裝webpack

首先要安裝 Node.js, Node.js 自帶了軟件包管理器 npm,Webpack 需要 Node.js v0.6 以上支持,建議使用最新版 Node.js。

用 npm 安裝 Webpack:

$ npm install webpack -g

此時 Webpack 已經安裝到了全局環境下,本課程中我們已裝好webpack,可以通過命令行 webpack -h 試試。

通常我們會將 Webpack 安裝到項目的依賴中,這樣就可以使用項目本地版本的 Webpack。

1.進入項目目錄

2.確定已經有 package.json,沒有就通過 npm init 創建

3.輸入命令 $ npm install webpack --save-dev 安裝 webpack 依賴

Webpack 目前有兩個主版本,一個是在 master 主干的穩定版,一個是在 webpack-2 分支的測試版,測試版擁有一些實驗性功能并且和穩定版不兼容,在正式項目中應該使用穩定版。

# 查看 webpack 版本信息$ npm info webpack# 安裝指定版本的 webpack$ npm install webpack@1.12.x --save-dev

四.在項目中使用webpack

首先有一個靜態頁面 index.html,

<!-- index.html --><html><head> <meta charset="utf-8"></head><body> <script src="bundle.js"></script></body></html>

現在創建一個 JS 入口文件 entry.js:

  // entry.js pico entry.js // 進入編輯器輸入 document.write('It works.'); // 保存并退出

然后編譯 entry.js 并打包到 bundle.js,運行命令:

$ webpack ./entry.js bundle.js

如果成功,打包過程會顯示日志:

 Hash: aeec068c58e1e78f0fb6 Version: webpack 1.12.9 Time: 70ms Asset   Size Chunks       Chunk Names bundle.js 1.48 kB    0 [emitted] main [0] ./entry.js 87 bytes {0} [built]

在點擊訪問測試將會打開一個新的窗口。它應該會顯示It works.。

注意:下面的課程中創建編輯文件都是用pico 文件名。

下一步,我們將把一些代碼移到一個額外的文件中content.js 并修改入口 entry.js:

 // content.js pico content.js // 編輯內容 module.exports = "It works from content.js.";
 // 修改entry.js //document.write('It works.'); document.write(require("./content.js")); // 添加content.js

編譯文件

 $ webpack ./entry.js bundle.js

更新您的瀏覽器窗口,您應該看到文本It works from content.js.

執行成功,會顯示

  Hash: ef96fed65f6d3ebc0dd7Version: webpack 1.12.9Time: 91ms  Asset  Size Chunks       Chunk Namesbundle.js 1.7 kB    0 [emitted] main  [0] ./entry.js 133 bytes {0} [built]  [1] ./content.js 97 bytes {0} [built]

Webpack 會分析入口文件,解析包含依賴關系的各個文件。這些文件(模塊)都打包到 bundle.js 。Webpack 會給每個模塊分配一個唯一的 id 并通過這個 id 索引和訪問模塊。在頁面啟動時,會先執行 entry.js 中的代碼,其它模塊會在運行 require 的時候再執行。

五.Loader介紹和使用

Webpack 本身只能處理 JavaScript 模塊,如果要處理其他類型的文件,就需要使用 loader 進行轉換。

Loader 可以理解為是模塊和資源的轉換器,它本身是一個函數,接受源文件作為參數,返回轉換的結果。這樣,我們就可以通過 require 來加載任何類型的模塊或文件,比如 CoffeeScript、 JSX、 LESS 或圖片。

loader 有以下這些特點:

1.Loader 可以通過管道方式鏈式調用,每個 loader 可以把資源轉換成任意格式并傳遞給下一個 loader ,但是最后一個 loader 必須返回 JavaScript。

2.Loader 可以同步或異步執行。

3.Loader 運行在 node.js 環境中,所以可以做任何可能的事情。

4.Loader 可以接受參數,以此來傳遞配置項給 loader。

5.Loader 可以通過文件擴展名(或正則表達式)綁定給不同類型的文件。

6.除了通過 package.json 的 main 指定,通常的模塊也可以導出一個 loader 來使用。

7.Loader 可以訪問配置。

8.插件可以讓 loader 擁有更多特性。

9.Loader 可以分發出附加的任意文件。

我們想要在應用中添加一個css文件。

WebPACK只能處理JavaScript本身,所以我們需要css-loader去處理 CSS。我們還需要style-loader去應用這個樣式在CSS文件。

安裝 loader:

npm install css-loader style-loader

注意:安裝 loaders(只需要在本地安裝,不需 -g)將會創建一個 node_modules 文件夾,在哪里 loaders 將會激活。

我們要在頁面中引入一個 CSS 文件 style.css,首頁將 style.css 也看成是一個模塊,然后用 css-loader 來讀取它,再用 style-loader 把它插入到頁面中。

添加一個style.css文件

 body {  background: blue;}

修改 entry.js:

  + require("!style!css!./style.css");  // 載入 style.css document.write(require("./content.js"));

重新編譯并更新您的瀏覽器看到藍色背景。

擴展名自動綁定loader

如果每次 require CSS 文件的時候都要寫 loader 前綴,是一件很繁瑣的事情。

我們可以根據模塊類型(擴展名)來自動綁定需要的 loader這樣寫require("./style.css")。

修改entry.js

- require("!style!css!./style.css");+ require("./style.css"); document.write(require("./content.js"));

注意:-表示這行刪掉或者注釋掉,+表示新增的內容。

編譯:

webpack ./entry.js bundle.js --module-bind "css=style!css"

注意:!在shell中有特殊意義,需要轉義,這樣寫才會成功的

webpack ./entry.js bundle.js --module-bind "css=style!css"

六.配置文件

Webpack 在執行的時候,除了在命令行傳入參數,還可以通過指定的配置文件來執行。默認情況下,會搜索當前目錄的 webpack.config.js 文件,這個文件是一個 node.js 模塊,返回一個 json 格式的配置信息對象,或者通過 --config 選項來指定配置文件。

我們想將配置選項移動到配置文件中,創建一個配置文件 webpack.config.js:

 module.exports = {  entry: "./entry.js",  output: {    path: __dirname,    filename: "bundle.js"  },  module: {    loaders: [      { test: /.css$/, loader: "style!css" }    ]  }};

現在我們僅僅運行:

webpack

如果完成成功,將會返回運行結果,該命令將嘗試WebPACK當前目錄中加載文件webpack.config.js。

這里對Webpack的打包行為做了配置,主要分為幾個部分:

  1. entry:指定打包的入口文件,每有一個鍵值對,就是一個入口文件
  2. output:配置打包結果,path定義了輸出的文件夾,filename則定義了打包結果文件的名稱
  3. module:定義了對模塊的處理邏輯,這里可以用loaders定義了一系列的加載器,以及一些正則。當需要加載的文件匹配test的正則時,就會調用后面的loader對文件進行處理,這正是webpack強大的原因。

漂亮的輸出

如果該項目的增長,編譯可能需要更長的時間。所以我們要展示一些進度條。我們想要的顏色…

我們可以這樣

 webpack --progress --colors

七.插件

插件可以完成更多 loader 不能完成的功能。

插件的使用一般是在 webpack 的配置信息 plugins 選項中指定。

Webpack 本身內置了一些常用的插件,還可以通過 npm 安裝第三方插件。

接下來,我們利用一個最簡單的 BannerPlugin 內置插件來實踐插件的配置和運行,這個插件的作用是給輸出的文件頭部添加注釋信息。

修改 webpack.config.js,添加 plugins:

 var webpack = require('webpack');module.exports = { entry: './entry.js', output: {  path: __dirname,  filename: 'bundle.js' }, module: {  loaders: [   {test: /.css$/, loader: 'style!css'}  ] }, plugins: [  new webpack.BannerPlugin('This file is created by mutouren') ]}

然后運行 webpack,打開 bundle.js,可以看到文件頭部出現了我們指定的注釋信息:

/! This file is created by mutouren //**/ (function(modules) { // webpackBootstrap/**/   // The module cache/**/   var installedModules = {};// 后面代碼省略......

一個 url-loader 來說,它會將樣式中引用到的圖片轉為模塊來處理,使用該加載器需要先進行安裝:

npm install url-loader

修改style.css文件

 body {  color:#fff;  background: url('./logo.png');}

配置webpack.config.js文件

 module.exports = {  entry: "./entry.js",  output: {    path: __dirname,    filename: "bundle.js"  },  module: {    loaders: [      { test: /.css$/, loader: "style!css" },      { test: /.(png|jpg)$/, loader: "url?limit=40000" }  // 添加到這    ]  }};

注意后面那個limit的參數,當你圖片大小小于這個限制的時候,會自動啟用base64編碼圖片。

我們還是運行

webpack

將會看到背景圖片已設置成功。

八.在 Webpack 中使用別名

模塊別名定義,方便后續直接引用別名,無須多寫長長的地址,比如我們現在想要把scripts/jquery.min.jsjquery壓縮文件打包.

別名(resolve.alias) 是 Webpack 的一個配置項,它的作用是把用戶的一個請求重定向到另一個路徑,例如通過修改 webpack.config.js 配置文件,jquery為別名加入:

resolve: { alias: {   jquery: "./scripts/jquery.min.js" }}

例如我們之前不用別名,在entry.js中,想要把jquery打包

require('./scripts/jquery.min.js');

設置別名,就可以修改為

require('jquery');

這樣待打包的腳本中的 require('jquery'); 其實就等價于 require('./scripts/jquery.min.js'); 。通過別名的使用在本例中可以減少幾乎一半的時間。

我們把需要的jquery打包了,但是現在前臺頁面想要直接用還是不可以的,需要我們把jquery暴露出來。

你可能在全局中使用了一個壓縮版本的 jquery,為了修復你可以安裝這個暴露全局加載器

npm install expose-loader --save-dev

然后像下面這樣修改entry.js:

require('expose?$!jquery');

把$作為別名為jquery的變量暴露到全局上下文中。

現在我們在頁面就可以使用$,例如:

 $('h1').text();

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国外成人在线播放| 日韩电影大片中文字幕| 亚洲精品小视频在线观看| 亚洲国产精品久久精品怡红院| 国产精品劲爆视频| 日韩av在线看| 欧美精品电影免费在线观看| 日本高清视频一区| 日本精品视频在线观看| 在线播放日韩精品| 清纯唯美亚洲激情| 国产日韩欧美在线视频观看| 亚洲国产成人av在线| 在线精品高清中文字幕| 久久影视电视剧免费网站清宫辞电视| 美日韩精品免费观看视频| 中文字幕日韩在线视频| 久久这里有精品视频| 欧美做受高潮电影o| 国产日韩视频在线观看| 国产日产久久高清欧美一区| 国产精品美女www| 亚洲xxxx视频| 欧美午夜视频在线观看| 日韩中文理论片| 91黄色8090| 日韩精品免费电影| 国产主播喷水一区二区| 国产精品劲爆视频| 韩曰欧美视频免费观看| 久久久91精品| 国产精品电影久久久久电影网| 国产91精品久久久| 日韩国产欧美精品在线| 国产精品私拍pans大尺度在线| 欧美日韩国产精品一区二区不卡中文| 911国产网站尤物在线观看| 久久影院模特热| 91精品国产自产在线观看永久| 午夜精品理论片| 91在线播放国产| 日韩在线观看免费| 亚洲成年人在线| 中文日韩电影网站| 91网站免费观看| 国产成人精品免费视频| 亚洲午夜精品久久久久久久久久久久| 69影院欧美专区视频| 日本高清久久天堂| 欧美另类在线播放| 日韩成人在线电影网| 亚洲人成在线观看| 国产亚洲人成网站在线观看| 亚洲护士老师的毛茸茸最新章节| 欧美激情成人在线视频| 久久久久久亚洲| 成人激情综合网| 亚洲人av在线影院| 欧美丝袜第一区| 亚洲福利视频免费观看| 欧美日韩国产中文字幕| 91社区国产高清| 日韩不卡中文字幕| 欧美激情一级欧美精品| 成人妇女淫片aaaa视频| 日韩免费黄色av| 成人黄色片网站| 亚洲欧美综合精品久久成人| 国产丝袜一区二区三区免费视频| 亚洲高清一二三区| 国产精品第100页| 亚洲综合色激情五月| 欧美巨猛xxxx猛交黑人97人| 性欧美办公室18xxxxhd| 国产91九色视频| 一区二区欧美在线| 亚洲成人久久久久| 欧美性猛交xxxx久久久| 97色在线视频| 91精品中国老女人| 日韩在线资源网| 久久综合亚洲社区| 成人两性免费视频| 午夜精品久久久久久99热软件| 国产精品午夜视频| 成人a免费视频| 国产精品久久久久久久一区探花| 九九精品视频在线| 欧美精品久久一区二区| 国产噜噜噜噜久久久久久久久| 狠狠躁夜夜躁人人爽天天天天97| 欧美乱妇高清无乱码| 日韩美女视频免费看| 日韩av在线免费| 国产精品美女主播在线观看纯欲| 亚洲精品国产精品乱码不99按摩| 日韩av在线高清| 国产这里只有精品| 亚洲欧美激情在线视频| 91免费的视频在线播放| 国产欧美一区二区三区四区| 成人在线激情视频| 丁香五六月婷婷久久激情| 久久777国产线看观看精品| 国产日本欧美一区| 久久频这里精品99香蕉| 亚洲丝袜在线视频| 国产精品日韩在线观看| 在线一区二区日韩| 精品视频www| 91精品国产综合久久香蕉的用户体验| 成人h视频在线| 色av中文字幕一区| 久久这里有精品视频| 日韩av中文在线| 国产91在线播放| 欧美精品手机在线| 国产精品视频精品| 久久久久久久久久久人体| 91精品国产九九九久久久亚洲| 久久久久久久久久久久av| 亚洲人a成www在线影院| 91中文字幕在线观看| 亚洲欧美制服中文字幕| 奇米四色中文综合久久| 久久视频在线免费观看| 成人福利在线观看| www.国产精品一二区| 日韩av一区在线观看| 欧美日韩国产中文精品字幕自在自线| 日韩在线国产精品| 91色琪琪电影亚洲精品久久| 国产一区深夜福利| 97国产成人精品视频| 日本19禁啪啪免费观看www| 日韩人在线观看| 中文字幕亚洲欧美| 国产视频精品久久久| 日韩大片免费观看视频播放| 欧美日韩精品中文字幕| 97在线免费观看| 欧美肥婆姓交大片| 狠狠躁夜夜躁人人爽天天天天97| 亚洲人成网站在线播| 欧美性生交xxxxxdddd| 欧美性猛交xxxx黑人| 日韩电影中文字幕| 91夜夜未满十八勿入爽爽影院| 久久五月情影视| 亚洲国产高清福利视频| 黑人巨大精品欧美一区免费视频| 成人综合国产精品| 日韩电影中文 亚洲精品乱码| 久久久久久免费精品| 日韩专区在线播放| 久久精品一偷一偷国产| 国产一区二区丝袜高跟鞋图片| 91精品在线看| 亚洲精品www久久久久久广东| 日韩免费高清在线观看| 国产狼人综合免费视频| 国产成人小视频在线观看| 97视频在线免费观看| 国产亚洲精品久久久|