webpack核心概念:
- 入口(entry)
指定webpack開始構(gòu)建的入口模塊本刽,從該模塊開始構(gòu)建并計(jì)算出直接或間接依賴的模塊或者庫
- 輸出(output)
告訴webpack如何命名輸出的文件以及輸出的目錄
path :入口文件最終要輸出到哪里母怜,
filename:輸出文件的名稱
publicPath:公共資源路徑 - loader
由于webpack只能處理javascript戏挡,所以我們需要對一些非js文件處理成webpack能夠處理的模塊硕淑,比如sass文件
- 插件(plugins)
-chunkcoding split的產(chǎn)物彬坏,我們可以對一些代碼打包成一個單獨(dú)的chunk,比如某些公共模塊童太,去重米辐,更好的利用緩存∈槭停或者按需加載某些功能模塊翘贮,優(yōu)化加載時間。在webpack3及以前我們都利用CommonsChunkPlugin將一些公共代碼分割成一個chunk征冷,實(shí)現(xiàn)單獨(dú)加載择膝。在webpack4 中CommonsChunkPlugin被廢棄誓琼,使用SplitChunksPlugin
webpack安裝流程
- step1:首先安裝Node.js
- step2:通過全局先將webpack指令安裝進(jìn)電腦中
npm install webpack -g
npm install --save-dev webpack
- step3:
npm init
(會生成一個package.json的文件)
webpack配置
- step1: 創(chuàng)建項(xiàng)目文件夾, 例如webpack_test
- step2: 在你的項(xiàng)目目錄下創(chuàng)建webpack.config.js配置文件, 通過這個文件進(jìn)行webpack的配置, 并且還要創(chuàng)建一些路徑保存基本文件,例如創(chuàng)建一個src文件夾检激,里面分別創(chuàng)建js,css,img文件夾
- step3:在src的js下創(chuàng)建一個入口文件, 我創(chuàng)建的叫做entry.js, 在項(xiàng)目目錄再創(chuàng)建一個index.html用來調(diào)試使用. 編寫webpack.config.js文件,
//webpack.config.js
module.exports = {
entry : './src/js/entry.js',//入口文件
output : {//輸出文件
filename : 'index.js',//輸出文件名
path : __dirname + '/out'//輸出文件路徑
},
}
index.html和入口文件entry.js
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>ss</title>
</head>
<body>
111
<script src="./out/index.js"></script>//注意在這里引入的是打包完成的js文件
</body>
</html>
//entry.js
console.log('1234');
webpack loader加載器
npm install babel-loader babel babel-core css-loader style-loader url-loader file-loader less-loader less --save-dev
修改webpack.config.js文件
module.exports = {
entry : './src/js/entry.js',
output : {
filename : 'index.js',
path : __dirname + '/out'
},
module : {
rules: [
{test: /.js$/, use: ['babel-loader']},
{test: /.css$/, use: ['style-loader', 'css-loader']},/*解析css, 并把css添加到html的style標(biāo)簽里*/
//{test: /.css$/, use: ExtractTextPlugin.extract({fallback: 'style-loader',use: 'css-loader'})},/*解析css, 并把css變成文件通過link標(biāo)簽引入*/
{test: /.(jpg|png|gif|svg)$/, use: ['url-loader?limit=8192&name=./[name].[ext]']},/*解析圖片*/
{test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader']}/*解析less, 把less解析成瀏覽器可以識別的css語言*/
]
},
}
webpack插件使用
修改webpack.config.js
var webpack = require('webpack');
var webpack = require('webpack');
var uglifyPlugin = new webpack.optimize.UglifyJsPlugin({minimize: true});//代碼壓縮
var CommonsChunkPlugin = new webpack.optimize.CommonsChunkPlugin('common');//把公共模塊提取出來, 并取名為'common'(名字自起), webpack之后再out文件夾下生成common.js, 測試時記得引入提取出來的公共模塊js文件
var ExtractTextPlugin = require("extract-text-webpack-plugin");//將css獨(dú)立引入變成link標(biāo)簽形式, 使用該插件需要獨(dú)立下載'npm install extract-text-webpack-plugin --save-dev', 同時下面的rules也必須更改
var providePlugin = new webpack.ProvidePlugin({$: 'jquery', jQuery: 'jquery', 'window.jQuery': 'jquery'});//引入jquery
module.exports = {
entry : {index: './src/js/entry.js', index2: './src/js/entry2.js'},
output : {
filename : '[name].js',
publicPath: __dirname + '/out',
path : __dirname + '/out'
},
module : {
rules: [
{test: /.js$/, use: ['babel-loader']},
//{test: /.css$/, use: ['style-loader', 'css-loader']},
{test: /.css$/, use: ExtractTextPlugin.extract({fallback: 'style-loader',use: 'css-loader'})},
{test: /.(jpg|png|gif|svg)$/, use: ['url-loader?limit=8192&name=./[name].[ext]']},
{test: /.less$/, use: ['style-loader', 'css-loader', 'less-loader']}
]
},
plugins: [uglifyPlugin, CommonsChunkPlugin, new ExtractTextPlugin('[name].css'),providePlugin]//插件集合
}
webpack服務(wù)器
首先先定位目錄輸入命令 npm install webpack-dev-server -g
, 修改webpack.config.js文件
publicPath: 'http://localhost:8080/out',
package.json
{
"name": "pmall",
"version": "4.2.6",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --port 4000 --hot --host 0.0.0.0 --content-base ./build --config ./build/webpack.config.dev.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"vue": "^2.5.3"
},
"devDependencies": {
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"babel-runtime": "^6.26.0",
"cross-env": "^5.1.1",
"css-loader": "^0.28.7",
"extract-text-webpack-plugin": "^3.0.2",
"file-loader": "^1.1.5",
"html-loader": "^0.5.1",
"html-webpack-plugin": "^2.30.1",
"node-sass": "^4.6.0",
"postcss-loader": "^2.0.9",
"sass-loader": "^6.0.6",
"style-loader": "^0.19.0",
"uglifyjs-webpack-plugin": "^1.0.1",
"url-loader": "^0.6.2",
"vue-loader": "^13.4.0",
"vue-router": "^3.0.1",
"vue-template-compiler": "^2.5.3",
"webpack": "^3.8.1",
"webpack-dev-server": "^2.9.4"
},
"description": ""
}