1. 程式人生 > >webpack學習筆記帶錯誤

webpack學習筆記帶錯誤

 

這樣就表示你已經安裝成功了。

二、初始化專案# 安裝好 webpack 後,我們要怎麼開始一個專案? 如果你用過 grunt.js、gulpjs 一類工具,它們可以藉助 yeoman 來初始化專案。webpack 的情況不太一樣,我們可以把它當作 node.js 專案來初始化。當然,借用一些模板會更省事,比如 react transform boilerplate。 但這裡還是聊聊如何手動初始化一個 webpack 專案。 第一步: 建立一個 package.json 檔案,用於儲存專案版本、依賴關係等 第二步: npm init -y 在當前目錄下安裝 webpack  

第三步:

npm install webpack --save-dev 之後,我們的專案下有兩個內容:  

我們還需要一個 index.html 檔案,示例如下:

  1. <span style="font-size:18px;"><!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>webpack 教程</title>

  6. </head>

  7. <body>

  8. hello wushaoxion

  9. </body>

  10. </html></span>

三、安裝 webpack-dev-server  

安裝webpack-dev-server的目的是為了建立伺服器,讓我們能瀏覽我們的專案。

第一步:

在全域性環境中安裝 webpack-dev-server:

npm install webpack-dev-server -g

第二步:

在專案根目錄下執行命令:

 webpack-dev-server

這樣,我們就可以在預設的 http://localhost:8080 網址上開啟我們的 index.html。四、webpack 配置#

在單頁面應用裡,專案通常會有一個入口(entry)檔案,假設是 main.js,我們通過配置 webpack 來指明它的位置。 首先,在專案根目錄新建一個 webpack.config.js,這是 webpack 預設的配置檔名稱,新增以下內容:  

  1. <span style="font-size:18px;">module.exports = {

  2. entry: './main.js'

  3. };</span>

這時在專案根目錄執行 webpack,會提示我們, Output filename not configured. 因為我們只是設定了入口(entry),還沒有設定一個輸出檔案的路徑與名稱。 在 webpack.config.js 中新增一個 output:  

  1. <span style="font-size:18px;"><pre name="code" class="javascript">module.exports = {

  2. entry: './main.js',

  3. output: {

  4. path: __dirname, // 輸出檔案的儲存路徑

  5. filename: 'bundle.js' // 輸出檔案的名稱

  6. }

  7. }</span>

現在在專案裡執行 webpack 命令,我們的根目錄下會多出一個 bundle.js 檔案:接下來,在 index.html 中引用 bundle.js 檔案:

  1. <span style="font-size:18px;"><!DOCTYPE html>

  2. <html lang="en">

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>webpack 教程</title>

  6. </head>

  7. <body>

  8. <script src="./bundle.js"></script> <!-- 在 index.html 檔案中新增這一行程式碼 -->

  9. </body>

  10. </html></span>

大功告成。

 

五、重新整理頁面

webpack-dev-server 提供了兩種模式用於自動重新整理頁面: iframe 模式 我們不訪問 http://localhost:8080,而是訪問 http://localhost:8080/webpack-dev-server/index.html inline 模式 在命令列中指定該模式,webpack-dev-server --inline。這樣 http://localhost:8080/index.html 頁面就會在 js 檔案變化後自動重新整理了。 以上說的兩個頁面自動重新整理的模式都是指重新整理整個頁面,相當於點選了瀏覽器的重新整理按鈕。六、第三方庫# webpack 並不是包管理器,所以如果我們要使用第三方庫,需要藉助 npm。比如,在專案裡安裝 jQuery:

npm install jquery --save

這樣我們在當前專案目錄下安裝了 jquery,並將它寫入 package.json 裡的依賴裡。七、模組化 JavaScript 如果我想用 ES6 的方式引入某個 es6 模組,比如:

import $ from 'whatever';

怎麼辦?瀏覽器目前還不提供原生支援,webpack 原生也僅支援 CommonJS 的那種寫法,但藉助 babel-loader ,我們可以載入 es6 模組: 安裝 babel-loader

npm install babel-loader babel-core babel-preset-es2015 --save-dev

配置 webpack.config.js 在 module.exports 值中新增 module:  

  1. <span style="font-size:18px;">module.exports = {

  2. entry: {

  3. app: ['./main.js']

  4. },

  5. output: {

  6. filename: 'bundle.js'

  7. },

  8. module: {

  9. loaders: [{

  10. test: /\.js$/,

  11. loaders: ['babel?presets[]=es2015'],

  12. exclude: /node_modules/

  13. }]

  14. }

  15. }</span>

這樣我們就可以在我們的 js 檔案中使用 ES6 語法,babel-loader 負責翻譯。  

八、CSS 載入器 我們可以按傳統方法使用 CSS,即在 HTML 檔案中新增: <link rel="stylesheet" href="style/app.css"> 但 webpack 裡,CSS 同樣可以模組化,使用 import 匯入。 因此我們不再使用 link 標籤來引用 CSS,而是通過 webpack 的 style-loader 及 css-loader。前者將 css 檔案以 <style></style> 標籤插入 <head> 頭部,後者負責解讀、載入 CSS 檔案。 安裝 CSS 相關的載入器

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

配置 webpack.config.js 檔案  

  1. <span style="font-size:18px;">{

  2. module: {

  3. loaders: [

  4. { test: /\.css$/, loaders: ['style', 'css'] }

  5. ]

  6. }

  7. }</span>

在 main.js 檔案中引入 css

import'./style/app.css';

這樣,在執行 webpack 後,我們的 CSS 檔案就會被打包進 bundle.js 檔案中,如果不想它們被打包進去,可以使用 extract text 擴充套件。

九、模組化 CSS 上一步裡,我們 import 到 JavaScript 檔案中的 CSS 檔案中的 CSS 在打包後是仍然是全域性的,也就是說,我們只是換了種載入 CSS 的方式,在書寫 CSS 的時候,還是需要注意使用命名規範,比如使用 BEM,否則全域性環境 CSS 類的衝突等問題不會消失。 這裡,webpack 做了一個模組化 CSS 的嘗試,真正意思上的「模組化」,即 CSS 類不會洩露到全域性環境中,而只會定義在 UI 模組內 – 類似 react.js 這類模組,或者 web components。 autoprefixer 我們在寫 CSS 時,按 CSS 規範寫,構建時利用 autoprefixer 可以輸出 -webkit、-moz 這樣的瀏覽器字首,webpack 同樣是通過 loader 提供該功能。 安裝 autoprefixer-loader

npm install autoprefixer-loader --save-dev

配置 webpack.config.js

  1. <span style="font-size:18px;">loaders: [{

  2. test: /\.css$/,

  3. loader: 'style!css!autoprefixer?{browsers:["last 2 version", "> 1%"]}',

  4. //...

  5. }]</span>

重啟 webpack-dev-server 假如我們在 CSS 中寫了 body { display: flex; } 規則,再檢視 bundle.js 檔案的話,我們能看到類似如下的程式碼:  

<span style="font-size:18px;">body {\n\tdisplay: -webkit-box;\n\tdisplay: -webkit-flex;\n\tdisplay: -ms-flexbox</span>