webpack入門

來源:互聯網
上載者:User

標籤:語言特性   round   操作   例子   第三方   entry   ref   相對   分享   

參考:http://www.jianshu.com/p/42e11515c10f

安裝webpack:npm install webpack -g一切皆模組

Webpack有一個不可不說的優點,它把所有的檔案都可以當做模組處理,包括你的JavaScript代碼,也包括CSS和fonts以及圖片等等等,只有通過合適的loaders,它們都可以被當做模組被處理。

CSS

webpack提供兩個工具處理樣式表,css-loader 和 style-loader,二者處理的任務不同,css-loader使你能夠使用類似@import 和 url(...)的方法實現 require()的功能,style-loader將所有的計算後的樣式加入頁面中,二者組合在一起使你能夠把樣式表嵌入webpack打包後的JS檔案中

......

你還記得嗎?webpack只有單一的入口,其它的模組需要通過 import, require, url等匯入相關位置,為了讓webpack能找到”main.css“檔案,我們把它匯入”main.js “中,如下

//main.jsimport React from ‘react‘;import {render} from ‘react-dom‘;import Greeter from ‘./Greeter‘;import ‘./main.css‘;//使用require匯入css檔案render(<Greeter />, document.getElementById(‘root‘));


通常情況下,css會和js打包到同一個檔案中,並不會打包為一個單獨的css檔案,不過通過合適的配置webpack也可以把css打包為單獨的檔案的。
不過這也只是webpack把css當做模組而已,咱們繼續看看一個真的CSS模組的實踐。

CSS module

在過去的一些年裡,JavaScript通過一些新的語言特性,更好的工具以及更好的實踐方法(比如說模組化)發展得非常迅速。模組使得開發人員把複雜的代碼轉化為小的,乾淨的,依賴聲明明確的單元,且基於最佳化工具,依賴管理和載入管理可以自動完成
不過前端的另外一部分,CSS發展就相對慢一些,大多的樣式表卻依舊是巨大且充滿了全域類名,這使得維護和修改都非常困難和複雜。

最近有一個叫做 CSS modules 的技術就意在把JS的模組化思想帶入CSS中來,通過CSS模組,所有的類名,動畫名預設都只作用於當前模組。Webpack從一開始就對CSS模組化提供了支援,在CSS loader中進行配置後,你所需要做的一切就是把”modules“傳遞都所需要的地方,然後就可以直接把CSS的類名傳遞到組件的代碼中,且這樣做只對當前組件有效,不必擔心在不同的模組中具有相同的類名可能會造成的問題。具體的代碼如下

外掛程式(Plugins)

外掛程式(Plugins)是用來拓展Webpack功能的,它們會在整個構建過程中生效,執行相關的任務。
Loaders和Plugins常常被弄混,但是他們其實是完全不同的東西,可以這麼來說,loaders是在打包構建過程中用來處理源檔案的(JSX,Scss,Less..),一次處理一個,外掛程式並不直接操作單個檔案,它直接對整個構建過程其作用。

Webpack有很多內建外掛程式,同時也有很多第三方外掛程式,可以讓我們完成更加豐富的功能。

使用外掛程式的方法

要使用某個外掛程式,我們需要通過npm安裝它,然後要做的就是在webpack配置中的plugins關鍵字部分添加該外掛程式的一個執行個體(plugins是一個數組)繼續看例子,我們添加了一個實現著作權聲明的外掛程式。

//webpack.config.jsvar webpack = require(‘webpack‘);module.exports = {  devtool: ‘eval-source-map‘,  entry:  __dirname + "/app/main.js",  output: {...},  module: {    loaders: [      { test: /\.json$/, loader: "json" },      { test: /\.js$/, exclude: /node_modules/, loader: ‘babel‘ },      { test: /\.css$/, loader: ‘style!css?modules!postcss‘ }//這裡添加PostCSS    ]  },  postcss: [    require(‘autoprefixer‘)  ],  plugins: [    new webpack.BannerPlugin("Copyright Flying Unicorns inc.")//在這個數組中new一個就可以了  ],  devServer: {...}}

 

通過這個外掛程式,打包後的JS檔案顯示如下

知道Webpack中的外掛程式如何使用了,下面給大家推薦幾個常用的外掛程式

HtmlWebpackPlugin

這個外掛程式的作用是依據一個簡單的模板,幫你產生最終的Html5檔案,這個檔案中自動引用了你打包後的JS檔案。每次編譯都在檔案名稱中插入一個不同的雜湊值。

安裝

 npm install --save-dev html-webpack-plugin

Hot Module Replacement

Hot Module Replacement(HMR)也是webpack裡很有用的一個外掛程式,它允許你在修改組件代碼後,自動重新整理即時預覽修改後的效果。
在webpack中實現HMR也很簡單,只需要做兩項配置

  1. 在webpack設定檔中添加HMR外掛程式;
  2. 在Webpack Dev Server中添加“hot”參數;

不過配置完這些後,JS模組其實還是不能自動熱載入的,還需要在你的JS模組中執行一個Webpack提供的API才能實現熱載入,雖然這個API不難使用,但是如果是React模組,使用我們已經熟悉的Babel可以更方便的實現功能熱載入。

...

 

webpack入門

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.