webpack4從零開始項目構建(entry,output,module,plugins, devServer)介紹和使用

webpack作爲我們項目開發中廣發應用的一款模塊打包工具,如果你對它還不熟悉的話,如果你還停留在npm run dev的話,接下來就跟我一起來走近webpack,瞭解它,擁抱它,本文介紹的是webpack4的版本。

1. webpack的安裝
  • 全局安裝
// webpack-cli 可以使webpack能夠被命令運行
npm install webpack webpack-cli -g
// 打包js
webpack  xxx.js
  • 局部安裝(全局安裝可能會使一些webpack3的項目無法運行,這裏推薦局部安裝)
// 1. 生成npm管理的項目
npm init -y
// 2. 安裝webpack webpack-cli
npm install webpack webpack-cli -D
// 運行webpack, webacpk已經被安裝到局部,使用npx命令
npx webpack xxx.js
2. webpack的打包entry,output

webpack默認的基礎配置文件是webpack.config.js,我們可以對這個文件做改造,從而達到我們的要求, 我們先實現一個最簡單的webpack打包配置

const path = require("path");
module.exports = {
    // entry: './src/index.js', // 打包的入口文件
    entry: {
    	main: './src/index.js',  // 打包的入口文件
    }
    output: {
    	// publicPath: 'http://cdn.yumang.com.cn' // 靜態資源cdn引入
        filename: '[name].js', // 輸入文件的名字
        path: path.resolve(__dirname, 'dist') // 輸出文件目錄
    }
}

至此一個簡單的打包配置就完成了,但這遠遠還不夠,我們接着深入吧

3. webpack-loaders

在我們的webpack中,webpack默認只能打包js文件,對於其他文件是無法解析的,此
時我們就要引出它的另一大核心概念loaders,接下來我們就用代碼看看怎麼解析css,scss圖片吧,首先在wepack.config.js 中新增module配置項,裏面可以配置rules是個數組。(loader 都是需要npm安裝的)

  • 打包images url-loader file-loader
module: {
	rules: [
			 {
                test: /\.(png|jpg|gif)$/,
                use: [
                    {
                        loader: 'url-loader', // url-loader依賴file-loader 要一起安裝
                        options: {
                            name: '[name]_[hash].[ext]', // 輸入圖片名稱格式爲, 圖片名稱+ hash值 + 文件後綴
                            outputPath: 'images/', // 圖片會被打包到dist目錄的images目錄下
                            limit: 2048 // 文件小於2kb會以base64形式插入js中,並在頁面中顯示,大於2Kb會打包成圖片
                        }
                    }
                ]
            }
        ]
    }
  • 打包css-scss在rules數組新增一項匹配規則
/**
在webpack中;loader的執行順序是從下往上,從右往左的,webpack解析scss,先用sass-loader解析scss文件成css文件,然後交給css-loader解析css。最後生成style嵌入head標籤中。注意sass-loader依賴node-sass要一起安裝
**/
{
	test: /\.scss$/,
	use: [
			'style-loader', 
			{
				loader: 'css-loader',
                options: {
                       importLoaders: 1  // 這個配置是當一個scss文件裏面引入了一個scss文件回回過頭從新往下執行一遍loader
                  }
             },
             'sass-loader', 
         ]
 },
 {
	test: /\.css$/,
	use: [
			'style-loader', 
			'css-loader'
         ]
 }
4. webpack-plugins

至此, css,js ,images都打包了,可是它還沒有引入我們的頁面呀,怎麼引入頁面呢,接下來就講到plugins。 他們都需要被安裝(npm install)。
在我們的配置文件中新增一項plugins,它是個數組

// html-webpack-plugin 它會幫助我們在dist目錄新建一個html文件,然後把打包的資源都引入,當然它也可以指定html文件引入js
var HtmlWebpackPlugin  = require("html-webpack-plugin");
// clean-webpack-plugin 它會在每次打包時清空dist目錄,然後重新生成
var {CleanWebpackPlugin} = require("clean-webpack-plugin");
module.export = 	{
	plugins: [
		new  HtmlWebpackPlugin({template: './src/index.html'}),
		new CleanWebpackPlugin ()
	]
}
5. webpack-dev-server

我們項目的雛形已經建立了,但是老鐵們有沒有發現我們每一次改變代碼,都需要重新打包,雖然webpack可以用–watch參數來幫我們監聽文件變化自動打包,但是我們前端開發中例如ajax請求,需要在服務器的狀態下請求,webpack-dev-server出現了,它可以監聽我們代碼變動自動打包,自動刷新頁面,啓動本地服務等等,美滋滋。接下來我們簡單講解下他的使用。

  1. 安裝
npm install webpack-dev-server -D
  1. webpack.config.js配置項新增
{
	devServer: {
	        contentBase: path.join(__dirname, "dist"), // 指定服務映射目錄
	        compress: true,
	        port: 9000 // 啓動服務端口
	 },
}
  1. package.json配置script腳本,我們就可以npm run dev啓動項目了,是不是很熟悉啊
// package.json
{
 "scripts": {
    	"dev": "webpack-dev-server"
  },
}

至此一個粗略的簡單項目就運行起來了,靜待下期完善。

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