天天看點

webpack配置 webpackwebpack 中的加載器webpack 打包釋出

配置 webpack

在項目中安裝和配置 webpack

  1. npm install webpack webpack-cli -D
  2. 在根目錄中,建立名為 webpack.config.js 的webpack配置檔案
  3. 在 webpack.config.js 檔案中配置如下:
module.exports = {
	mode: 'development' // mode 用來指定構模組化式
}
           
  1. 在 package.json 檔案中的 scripts 節點下,新增 dev 腳本如下:
"scripts": {
	"dev": "webpack" // script 節點下的腳本,可以通過 npm run 執行
}
           
  1. 在終端中運作 npm run dev 指令, 啟動 webpack 進行項目打包

配置打包的入口與出口

webpack 的 4.x 版本中預設約定:

  • 打包的入口檔案為 src -> index.js
  • 打包的輸出檔案為 dist -> main.js

如果要修改打包的入口與出口,可以在 webpack.config.js 中新增如下配置資訊:

const path = require('path'); // 導入 node.js 中專門操作路徑的子產品
module.exports = {
	entry: path.join(__dirname, './src/index.js'), // 打包入口檔案的路徑
	output: {
		path: path.join(__dirname, './dist'), // 輸出檔案的存放路徑
		filename: 'bundle.js' // 輸出檔案的名稱
	}
}
           

webpack 自動打包功能

  1. npm install webpack-dev-server -D
  2. 修改 package.json -> scripts 中的 dev
"scripts": {
	"dev": "webpack-dev-server"
}
           
  1. 将 src -> index.html 中的 script 腳本路徑,改為絕對路徑 “/buldle.js”
  2. 運作 npm run dev 指令,重新打包
  3. 在浏覽器中通路 http://localhost:8080 可以檢視自動打包後的效果

注意:

webpack-dev-server 會啟動一個實時打包的 http 伺服器

webpack-dev-server 打包生成的輸出檔案,預設放到了項目根目錄中,而且是虛拟的,看不見

配置 html-webpack-plugin 生成預覽頁面

  1. npm install html-webpack-plugin -D
  2. 修改 webpack.config.js 檔案頭部區域,添加如下配置資訊:
// 導入生成預覽頁面的插件,得到一個構造函數
const HtmlWebpackPlugin = require('html-webpack-plugin');
const htmlPlugin = new HtmlWebpackPlugin({ // 建立插件的執行個體對象
	template: './src/index.html', // 指定要用到的模闆檔案
	filename: 'index.html' // 指定生成檔案的名稱,該檔案存在于記憶體中,在目錄中不顯示
});
           
  1. 修改 webpack.config.js 檔案中向外暴露的配置對象, 新增如下配置節點:
module.exports = {
	plugins: [ htmlPlugin ] // plugins 數組是 webpack 打包期間會用到的一些插件清單
};
           

配置自動打包相關的參數

// package.json 中的配置
// --open 打包完成後自動打開浏覽器頁面
// --host 配置 IP 位址
// --port 配置端口
"scripts": {
	"dev": "webpack-dev-server --open --host 127.0.0.1 --port 8888"
},
           

webpack 中的加載器

通過 loader 打包非 js 子產品

在實際開發過程中,webpack 預設隻能打包處理以 .js 字尾名結尾的子產品,其他非 .js 字尾名結尾的子產品,webpack 預設處理不了, 需要調用 loader 加載器才可以正常打包,否則會報錯!

loader 加載器可以協助 webpack 打包處理特定的檔案子產品,比如:

  • less-loader 可以打包處理 .less 相關的檔案
  • sass-loader 可以打包處理 .scss 相關的檔案
  • url-loader 可以打包處理 css 中與 url 路徑相關的檔案

loader 的調用過程:

webpack配置 webpackwebpack 中的加載器webpack 打包釋出

打包處理 css 檔案

  1. npm i style-loader css-loader -D
  2. 在 webpack.config.js 的module.exports中添加 module -> rules 數組中,添加 loader 規則如下:
// 所有第三方檔案子產品的比對規則
module: {
	rules: [
		{ test: /\.css$/, use: ['style-loader', 'css-loader'] }
	]
}
           

其中,test 表示比對的檔案類型, use 表示對應要調用的 loader

注意:

  • use 數組中指定的 loader 順序是固定的
  • 多個 loader 的調用順序是:從後往前調用

打包處理 less 檔案

  1. npm i less-loader less -D
  2. 在 webpack.config.js 中向外暴露的部分中添加如下 loader 規則:
// 所有第三方檔案子產品的比對規則
module: {
	rules: [
		{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] }
	]
}
           

打包處理 scss 檔案

  1. npm i sass-loader node-sass -D
  2. 在 webpack.config.js 中向外暴露的部分中添加如下 loader 規則:
module: {
	rules: [
		{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }
	]
}
           

配置 postCSS 自動添加 css 的相容字首

  1. npm i postcss-loader autoprefixer -D
  2. 在項目根目錄中建立 postcss 的配置檔案 postcss.config.js,并初始化如下配置:
const autoprefixer = require('autoprefixer'); // 導入自動添加字首的插件
module.exports = {
	plugins: [ autoprefixer ] // 挂載插件
}
           
  1. 在 webpack.config.js 的module -> rules 數組中,修改 css 的 loader 規則如下:
module: {
	rules: [
		{ test: /\.css$/, use: ['style-loader', 'css-loader', 'postcss-loader'] }
	]
}
           

打包樣式表中的圖檔和字型檔案

  1. npm i url-loader file-loader -D
  2. 在 webpack.config.js 中向外暴露的部分中添加如下 loader 規則:
module: {
	rules: [
		{
			test: /\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,
			use: 'url-loader?limit=16940'
		}
	]
}
           

其中 ? 之後的是 loader 的參數項

limit 用來指定圖檔的大小,機關時直接(byte),隻有小于 limit 大小的圖檔,才會被轉化為 base64 圖檔

打包處理 js 檔案中的進階文法

  1. 安裝babel轉換器相關的包:npm i babel-loader @babel/core @babel/runtime -D
  2. 安裝babel文法插件相關的包:npm i @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
  3. 在項目根目錄中,建立 babel 配置檔案 babel.config.js 并初始化基本配置如下:
module.exports = {
	presets: [ '@babel/preset-env' ],
	plugins: [ '@bable/plugin-transform-runtime', '@babel/plugin-proposal-class-properties' ]
}
           
  1. 在 webpack.config.js 的 module -> rules 數組中,添加 loader 規則如下:
// exclude 為排除項,表示 babel-loader 不需要處理 node_modules 中的 js 檔案
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
           

webpack 中配置 vue 元件加載器

  1. npm i vue-loader vue-template-compiler -D
  2. 在 webpack.config.js 配置檔案中,添加 vue-loader 的配置項如下:
const VueLoaderPlugin = require('vue-loader/lib/plugin')
module.exports = {
	module: {
		rules: [
			// ... 其它規則
			{ test: /\.vue$/, loader: 'vue-loader' }
		]
	},
	plugins: [
		// ... 其它插件
		new VueLoaderPlugin() // 請確定引入這個插件!
	]
}
           

webpack 打包釋出

上線之前需要通過webpack将應用進行整體打包,可以通過 package.json 檔案配置打包指令:

// 在package.json檔案中配置 webpack 打包指令
// 該指令預設附加元件目根目錄中的webpack.config.js 配置檔案
"scripts": {
	// 用于打包的指令
	"build": "webpack -p",
	// 用于開發調試的指令
	"dev": "webpack-dev-server --open --host 127.0.0.1 --port 3000"
},
           

繼續閱讀