Webpack指南(一):安裝,創建項目,配置文件,開發環境以及問題匯總


Webpack是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時,它會遞歸地構建一個依賴關系圖(dependency graph),其中包含應用程序需要的每個模塊,然后將所有這些模塊打包成一個或多個 bundle

概要

從 webpack v4.0.0 開始,可以不用引入一個配置文件。然而,webpack 仍然還是高度可配置的。在開始前你需要先理解四個核心概念

  • 入口(entry)
  • 輸出(output)
  • loader
  • 插件(plugins)

本文分五個部分:安裝,創建項目,配置文件,開發文件以及問題匯總

一、安裝

  在安裝Webpack前,本地需要支持node.js,從官網上下載LTS版本,然后按照步驟安裝下載,其中有默認安裝地址,我選擇了自定義安裝地址。這是菜鳥教程里的步驟,可以供參考:http://www.runoob.com/nodejs/nodejs-install-setup.html

  由於 npm 安裝速度慢,本教程使用了淘寶的鏡像及其命令 cnpm,安裝使用介紹參照:使用淘寶 NPM 鏡像

  使用語句:npm install cnpm -g --registry=https://registry.npm.taobao.org

  接着全局安裝webpack

  cnpm install webpack -gnpm install webpack -g

  由於現在安裝的是4.0的版本,所以還要加裝一個CLI : cnpm install webpack-cli -g / npm install webpack-cli -g

  此處可能會出現一個問題:'NODE' 不是內部或外部命令,也不是可運行的程序 或批處理文件(問題1)‘webpack'不是內部或外部命令,也不是可運行的程序 或批處理文件(問題2)

二、創建項目 

  1、cmd打開,一般打開默認C盤,這是要 cd\  再  d:    然后 打開你的文件  cd webpack_demo    (如果沒有還未創建,可以使用 mkdir webpack_demo && cd webpack_demo )

  

  2、初始化npm

    npm init

  3、本地安裝webpack

    npm install webpack webpack-cli --save-dev

  4、安裝loader

  Webpack 本身只能處理 JavaScript 模塊,如果要處理其他類型的文件,就需要使用   loader 進行轉換。所以如果我們需要在應用中添加 css 文件,就需要使用到 css-loader 和 style-loader,他們做兩件不同的事情,css-loader 會遍歷 CSS 文件,然后找到 url() 表達式然后處理他們,style-loader 會把原來的 CSS 代碼插入頁面中的一個 style 標簽中。

  接下來我們使用以下命令來安裝 css-loader 和 style-loader(全局安裝需要參數 -g)。

    npm install css-loader style-loader  

  4、創建runoob1.js,runoob2.js,index.html,style.css,

    

     

 

    

       

  5、打包文件 webpack runoob1.js -o bundle.js

          

  6、直接打開index.html

  

  權限問題錯誤:npm ERR! Error: EPERM: operation not permitted, open 'D:\webpack_demo\package.json'(問題3)

  打包問題報錯webpack runoob1.js bundle.js(問題4)

 三、配置文件

  插件在 webpack 的配置信息 plugins 選項中指定,用於完成一些 loader 不能完成的工。安裝一個plugin,可以自動快速的幫我們生成HTML。

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

  在 webpack 4 中,可以無須任何配置使用,然而大多數項目會需要很復雜的設置,這就是為什么 webpack 仍然要支持 配置文件。這比在終端(terminal)中手動輸入大量命令要高效的多,所以創建 webpack.config.js 文件,代碼如下所示:

const path = require('path');
var HtmlwebpackPlugin = require('html-webpack-plugin');
module.exports = {
  mode:'production',
  entry: './runoob1.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  devServer: {
    historyApiFallback: true,
    hot: true,
    inline: true,
    progress: true,
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlwebpackPlugin({
      title: 'Hello World app'
    })
  ]

};

  接下來執行webpack命令,即可生成:

  

  你會發現多出來一個dist文件夾,直接點開里面的html文件,可以查看到結果

  可能問題:1、ERROR in Entry module not found: Error: Can't resolve 'runoob1.js' in 'D:\webpack_demo'  2、Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.(問題5)

四、開發環境

  在菜鳥教程中,有好幾種協助開發,這里使用了webpack-dev-server開發服務,通過 localhost:8080 啟動一個 express 靜態資源 web 服務器,並且會以監聽模式自動運行 webpack,

  全局安裝  npm install webpack-dev-server -g

  在package.json 中

 

 "scripts": {
    "start": "webpack-dev-server --hot --inline"
  },

  webpack.config.js中

  devServer: {
    historyApiFallback: true,
    hot: true,
    inline: true,
    progress: true,
  },

  運行npm start ,然后在瀏覽器打開 http://localhost:8080/ 輸出結果如下:

  

 

 五、問題匯總:

  (1)'NODE' 不是內部或外部命令,也不是可運行的程序 或批處理文件

    解決:設置path

  

 

 

  (2)‘webpack'不是內部或外部命令,也不是可運行的程序 或批處理文件

    解決:由於安裝的是全局安裝,所以webpack地址未在本地安裝的文件中,要使用添加path,path中添加全局安裝webpack的地址

    

 

  (3)權限問題錯誤:npm ERR! Error: EPERM: operation not permitted, open 'D:\webpack_demo\package.json'

    解決:設置為管理員權限,或者直接使用win+x,選擇命令提示符(管理員),在里面運行命令就好了

  (4)打包問題報錯webpack runoob1.js bundle.js

    解決:webpack4版本問題:使用本語句打包即可  webpack demo.js -o demo.bundle.js

  (5)ERROR in Entry module not found: Error: Can't resolve 'runoob1.js' in 'D:\webpack_demo'  2、Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.

    解決:初始化npm init,因為菜鳥教程中的配置是在3.0版本,版本4中的中改變,所以要做對應修改。使用官網內容時,引號內容要做相應調整。

參考列表:

1、菜鳥教程http://www.runoob.com/w3cnote/webpack-tutorial.html

2、webpack官網 https://www.webpackjs.com/concepts/loaders/

3、其他問題搜索例如:https://zhuanlan.zhihu.com/p/20367175?columnSlug=FrontendMagazine

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM