初識 Webpack (一)

目錄

◆ 主要內容

◆ Webpack是什麼

Webpack爲什麼使用?

Webpack實現過程

◆ Webpack安裝配置(實戰1)

◆ Webpack安裝配置(實戰2)

◆ Webpack打包操作實戰

◆ Webpack配置講解

◆ Webpack其他知識


  • ◆ 主要內容

✦ Webpack是什麼

 Webpack安裝配置

  • ◆ Webpack是什麼

現今的很多網頁其實可以看作是功能豐富的應用,他們擁有着複雜的JavaScript代碼和一大堆依賴包。爲了簡化開發的複雜度,前端社區湧現了很多好的實踐方法:

            

  • Webpack爲什麼使用?

可以看作是模塊打包機:它做的事情是分析你的項目結構,找到JavaScript模塊以及其他一些瀏覽器,不能直接運行的拓展語言(Scss, TypeScript等),並將其轉換和打包爲合適的格式供瀏覽器使用:

  • Webpack實現過程

把你的項目當做一個整體,通過一個給定的主文件(如index.js ),Webpack將從這個文件開始找到你的項目的所有依賴文件,使用loaders處理他們,然後打包爲一個(或多個)瀏覽器可識別的JavaScript文件:

總結:就是一個打包工具,打包成瀏覽器識別的處理工具。

  • ◆ Webpack安裝配置(實戰1)

1、新建一個目錄名爲webpack-day01,在其下面執行
npm init -y(package.json生成)
2、安裝webpack和webapck-cli
// npm install webpack webpack-cli -D
npm i -D webpack-cli
npm i -D webpack
3、進入webpack配置
(一)webpack可以進行0配置
- 打包工具 -> 輸出後的結果(js模塊)
① 新建打包目錄和文件
	./webpack-day01/src/index.js -> console.log('hello')
② 打包測試
	npx webpack
	2.1 其默認會執行node_module下的bin文件,裏面去解析是否存在node.exe,如果無則用node執行其他步驟
	2.2 在僅有package.json和index.js文件執行打包命令之後,會自動生成dist和對應壓縮過後的main.js文件
- 打包 (支持我們js模塊化)
① 新建a文件和引入a文件
	./webpack-day01/src/a.js -> module.exports = 'zfpx'
② 打包測試		
	./webpack-day01/src/index.js -> 
	let a = require('./a.js'); // 這樣的語法不可能在瀏覽器中跑的,是node的規範,node可以在node中運行,我們需要在瀏覽器中執行哦
	console.log(a);
③ 運行打包測試
	3.1 新建index.html
	./webpack-day01/dist/index.js
	3.2 引入mian.js
	<script src="./main.js"></script>
	3.3 在瀏覽器上預覽控制檯輸出結果
	zfpx
④ 總結:
	也就是說webpack幫我們去解析了js模塊,並且以當前js爲準查找依賴文件,打包成一個文件,解決了瀏覽器的require問題
	
問題:我們能否修改上述打包後的文件名稱呢?打包對象呢?答:是可以的。
(二、1)webpack手動配置
- 默認配置文件的名字 -> webpack.config.js

	// webpack 是node寫出來的node寫法
	let path = require('path');
	console.log(path.resolve(__dirname + "/public"));

	module.exports = {
		mode:'development',// 模式 默認兩種 production development
		/* 入口 */
		entry: __dirname + "/src/index.js", // 或寫成 entry: "./src/index.js",
		output: {
			/* 打包後的文件名 */
			filename: "bundle.js",
			/* 路徑必須是一個絕對路徑,要引入path模塊 */
			path: path.resolve(__dirname + "/public"), // path.resolve可以把相對路徑解析成絕對路徑, __dirname指的是當前目錄下產生一個public目錄,不加也行
			// 或寫成 path: __dirname + "/public",
		}
	}

	問題:這個名字是從哪裏來的呢?
	答:./node_modules/webpack-cli/bin/config/config-yargs.js中Line79行寫着:
	...
		defaultDescription: "webpack.config.js or webpackfile.js",
				requiresArg: true
			},
	...
	但是也可以強制修改名字哦!!
	問題:如何使用呢?
	答:
	1、直接使用
	npx webpack --config webpack.config.my.js(npx webpack --config 配置文件名稱)
	2、package.json腳本配置
	...
	"scripts": {
		"build": "webpack --config webpack.config.my.js",
		...
	},
	...
	控制檯執行npm run build
	3、-- --xx 傳參使用
	npm run build -- --config webpack.config.my.js
(二、2)webpack手動配置——localhost訪問
	前言:此時我們發現必須是本地文件打開瀏覽器才能訪問到結果,如何改成localhost的形式呢?
	2.2.1 安裝開發依賴
	npm install webpack-dev-server -D
	2.2.2 在配置文件叫做webpack.config.js前提下執行腳本
	npx webpack-dev-server(或者在package.json中配置)
	/* (或者在package.json中配置Key爲dev的內容)
	......
	"scripts": {
		...,
		"dev": "webpack-dev-server",
		...
	},
	...... */
	好處:不會真實的打包文件,默認以當前目錄下爲一個靜態目錄,訪問端口時顯示目錄結果。
	問題:希望進入到build目錄下,如何操作呢?
	答:添加devServer內容,寫法如下
	module.exports = {
	/* devServer: { // 開發服務器的配置
		port: 3000,
		progress: true, // 打包時添加進度條
		contentBase: "./public" // 怎麼才能指向public目錄,而不是靜態文件目錄
	}, */
	
	devServer:{
	    port:8090,
	    contentBase:path.join(__dirname,"public") 
	},
	...
	
	2.2.3 訪問http://localhost:8080/和http://localhost:8090/是兩個不同的結果,當前重啓之後8080訪問是失敗的
  • (二、3)webpack手動配置——自動建立html打包至內存中

  1. 目的圖 (可放大);
  2. 安裝依賴 npm install html-webpack-plugin -D
  3. 使用依賴
    // webpack 是node寫出來的node寫法
    let path = require('path');
    let HtmlWebpackPlugin = require('html-webpack-plugin')
    console.log(path.resolve(__dirname + "/public"));
    
    module.exports = {
    	devServer: { // 開發服務器的配置
    		port: 3000,
    		progress: true, // 打包時添加進度條
    		contentBase: "./public", // 怎麼才能指向public目錄,而不是靜態文件目錄
    		compress: true, // 啓動jgp壓縮
    	},
    
    	/* devServer:{
    	    port:8090,
    	    contentBase:path.join(__dirname,"public") 
    	}, */
    	mode: 'development', // 模式 默認兩種 production development
    	/* 入口 */
    	entry: __dirname + "/src/index.js", // 或寫成 entry: "./src/index.js",
    	output: {
    		/* 打包後的文件名 */
    		filename: "bundle.js",
    		/* 路徑必須是一個絕對路徑,要引入path模塊 */
    		path: path.resolve(__dirname + "/public"), // path.resolve可以把相對路徑解析成絕對路徑, __dirname指的是當前目錄下產生一個public目錄,不加也行
    		// 或寫成 path: __dirname + "/public",
    	},
    	/* (或者在package.json中配置Key爲dev的內容)
    	......
    	"scripts": {
    		...,
    		"dev": "webpack-dev-server",
    		...
    	},
    	...... */
    	plugins: [ // 數組 放着所有的webpack插件
    		new HtmlWebpackPlugin({// 或寫成 new HtmlWebpackPlugin()
    			template:'./src/index.html',
    			filename:'dabao.html',// 模板有了,打包出來的文件命名爲dabao.html
    		}),
    	]
    }
    

     

  4. 如果在package.json中配置了key爲dev("dev": "webpack-dev-server",)的內容,執行控制檯命令npm run dev
  5. 如果想要壓縮index.html利用minify(1、html有些有“en”雙引號去掉 2、避免緩存)
    plugins: [ // 數組 放着所有的webpack插件
    		new HtmlWebpackPlugin({ // 或寫成 new HtmlWebpackPlugin()
    			template: './src/demo.html', // 或寫成 "template": __dirname + "/src/demo.html" 
    			filename: 'index.html', // 模板有了,打包出來的文件命名爲dabao.html
    			minify: {
    				removeAttributeQuotes: true, // 刪除charset="utf-8"雙引號
    				collapseWhitespace: true, // 壓縮成一行
    			},
    			hash: true,
    		}),
    	]
    <!-- [hash:8] -->
    
    output: {
    		/* 打包後的文件名 */
    		filename: "bundle.[hash:8].js", // 避免緩存,每次修改產生新文件
    		/* 路徑必須是一個絕對路徑,要引入path模塊 */
    		path: path.resolve(__dirname + "/public"), // path.resolve可以把相對路徑解析成絕對路徑, __dirname指的是當前目錄下產生一個public目錄,不加也行
    		// 或寫成 path: __dirname + "/public",
    	},

     

  6. 上述代碼百度網盤地址:

鏈接:https://pan.baidu.com/s/1dskJINhkqbU-huvut8mEOw 
提取碼:nmww 
複製這段內容後打開百度網盤手機App,操作更方便哦

  • ◆ Webpack安裝配置(實戰2)

  1. 1 或者Webpack的全局安裝

npm install -g webpack

  1. 2 初始化一個基礎實例

前言:

在mian.js中引入了module.js,並且調用相應的方法,對於這樣的模塊,瀏覽器是無法直接使用的,僅僅是開發的過程中可以進行模塊的引入和調用方法,要變成瀏覽器識別的要通過Webpack,那如何操作呢?跟着下面的步驟:

  1. 3 隨便新建一個文件夾webpack,裏面再新建module.js和main.js
<!--module.js-->
module.exports = {
	sayHello:function(){
		console.log("hello world");
	}
}

<!--main.js-->
var mymodule = require("./module.js")
mymodule.sayHello();
  1. 4 打包(創建Webpack的配置文件【webpack.config.js】)
<!--最基礎的webpack配置文件-->
module.exports = {
	entry:__dirname+"/main.js", <!--入口文件[注意是兩個下劃線],在項目中是/app/main.js-->
	output:{ <!--打包輸出路徑-->
		path:__dirname+"/public",
		filename:"bundle.js" <!--生成文件名字-->
	}
}
  1. 5 新建public打包目錄

  • ◆ Webpack打包操作實戰

步驟:

  1. 1 ➫ 參考文章
  1. 2 全局安裝webpack-cli
npm install webpack-cli -g
  1. 2 ➫ 在當前目錄下面執行webpack指令(注意先安裝,如果是全局安裝則直接輸入下面命令)
webpack
  1. 3 ➫ 打包結果

          

  1. ➀ 四種輸出bundle.js文件名稱

  2. 將css文件單獨分離(stylus

  3. 編譯es6和樣式分離(vue語法適應es6和解析css文件

  4. ➃ 安裝第三方庫(案例jquery

  5. ➄ 其他配置跨域、定位css或者js異常devtool、clean、圖標文件案例

  6. document.write、引用第三方圖標、使用template模板打包 案例

  7. 打印 vconsole 和url解析 jsUri案例

  8. ➇ vue中執行多個併發請求案例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章