webpack4 入門配置研究


1. 全局安裝 npm install webpack webpack-cli webpack-dev-server -g

1.1)輸密文的密碼(電腦開機)
1.2)安裝成功

2. 輸入命令mkdir config dist src創建三個文件夾

3.輸入命令npm init -y

4. 輸入命令touch dist/index.html src/index.js分別dist和src文件夾下面創建一個index.html文件和index.js文件

5. webpack4.x中打包默認找src/index.js作為默認入口,可以直接在終端中輸入命令webpack 將當前的內容進行一個簡單的打包

5.1) 應該看到打包的時候終端中會出現黃色的警告提示

5.2)mode是webpack中獨有的,有兩種打包環境,一個是開發環境:development另外一個是生產環境:production
打包的時候輸入webpack --mode=development或者webpack --mode=production就不會出現警告提示了
5.3)webapck --mode=production命令打包,這個是代碼壓縮過的,同時項目文件夾下面多了 一個node_modules文件夾\

6.輸入命令touch config/webpack.dev.js創建文件

7. 輸入命令rm dist/main.js src/index.js移除掉這兩個文件我們自己來配置

7.1) 現在在src文件夾下面創建main.js文件
7.2)進入到webpack.dev.js文件中進行配置,具體在代碼中注釋

7.3) 現在不能執行之前的webpack --mode="development"命令了會報下面的錯誤沒有放在src文件夾內;這里是因為webpack4打包默認找的src下面的index.js入口,我們前面已經刪除了,這里src下面死main.js文件,所以找不到就報ERROR in Entry module not found: Error: Can't resolve './src' in '/Users/yubo/Desktop/www/study_webpack2'錯誤,所以這里我們到packsge.json里面配置下命令,讓打包的時候執行我們在config/webpack.dev.js下面配置的入口。

啟動配置

8.npm run build 就可以了;

簡單配置 webpack.dev.js

module.exports = {
entry: ['./src/okcPages/okMainIndex.js', './src/units/remChange.js','./src/okcPages/initCp.js'],
output: {
publicPath: '/', //這里要放的是靜態資源CDN的地址
path: path.resolve(__dirname, 'dist'),
filename: 'build.js' // 單文件輸出 ,如果多文件可在 entry :{} ,這里 filename: '[name].js'
},
resolve: {
extensions: [".js", ".css", ".json"],
alias: {
// jquery: './src/units/jquery-1.83.min.js',
} //配置別名可以加快webpack查找模塊的速度
},
externals: {
jquery: 'window.$'
},
module: {
// 多個loader是有順序要求的,從右往左寫,因為轉換的時候是從右往左轉換的
rules: [
{
test: /.css$/,
use: ExtractTextWebapckPlugin.extract({
fallback: 'style-loader',
use: ['css-loader'] // 不再需要style-loader放到html文件內
}),
include: path.join(__dirname, 'src'), //限制范圍,提高打包速度
exclude: /node_modules/
},
{
test: /.jsx?$/,
use: {
loader: 'babel-loader',
query: { //同時可以把babel配置寫到根目錄下的.babelrc中
presets: ['env', 'stage-0'] // env轉換es6 stage-0轉es7
}
}
},
{ //file-loader 解決css等文件中引入圖片路徑的問題
// url-loader 當圖片較小的時候會把圖片BASE64編碼,大於limit參數的時候還是使用file-loader 進行拷貝
test: /.(png|jpg|jpeg|gif|svg)/,
use: {
loader: 'url-loader',
options: {
outputPath: 'images/', // 圖片輸出的路徑
limit: 1 * 1024
}
}
}
]
},
plugins: [
// 多入口的html文件用chunks這個參數來區分
/* new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'src', 'index.html'),
filename: 'index.html',
hash: true,//防止緩存
minify: {
removeAttributeQuotes: true//壓縮 去掉引號
}
}),*/
new ExtractTextWebapckPlugin('css/build.css'), // 其實這個特性只用於打包生產環境,測試環境這樣設置會影響HMR
// new CleanWebpackPlugin([path.join(__dirname, 'dist')]),
],
devtool: 'eval-source-map', // 指定加source-map的方式
devServer: {
contentBase: path.join(__dirname, "dist"), //靜態文件根目錄
port: 3824, // 端口
host: 'localhost',
overlay: true,
compress: false // 服務器返回瀏覽器的時候是否啟動gzip壓縮
},
watch: true, // 開啟監聽文件更改,自動刷新
watchOptions: {
ignored: /node_modules/, //忽略不用監聽變更的目錄
aggregateTimeout: 500, //防止重復保存頻繁重新編譯,500毫米內重復保存不打包
poll: 1000 //每秒詢問的文件變更的次數
},

配置js壓縮

uglifyjs-webpack-plugin(JS壓縮插件,簡稱uglify) webpack4 已經集成;
const uglify = require('uglifyjs-webpack-plugin');
plugins:[
new uglify()
],
這個時候我們再終端運行命令 npm run bulid 進行打包會提示下載webpack-cli 命令輸入yes

webpack都有哪些插件?

1.)html生成插件: html-webpack-plugin
2.)css分離的插件:extract-text-webpack-plugin new extractTextPlugin("css/index.css") //這里的/css/index.css 是分離后的路徑
3.)處理HTML中的圖片:html-withimg-loader
4.)自動處理CSS3屬性前綴:postcss-loader 和 autoprefixer
5.)消除未使用的css 和js: purify-css purifycss-webpack
6.)copy 插件 :copy-webpack-plugin
7.)編譯輸出文件前,刪除舊文件: clean-webpack-plugin
8.) 壓縮css,優化css結構,利於網頁加載和渲染 : optimize-css-assets-webpack-plugin
9.) 打包編譯時,顯示進度條: progress-bar-webpack-plugin
10.) 規范scss, less,css書寫規則:stylelint-webpack-plugin
11.) 將CSS解壓到單獨的文件中。它為每個包含CSS的JS文件創建一個CSS文件:webpack4用mini-css-extract-plugin 代替了 extract-text-webpack-plugin
12.)減少構建時間:webpack-parallel-uglify-plugin
13.)加快編譯速度:happypack
14.)資源路徑與問件名對應:assets-webpack-plugin
參考原文:https://segmentfault.com/a/1190000015355816

1.路徑問題

var website ={
publicPath:"http://localhost:8888/"
// publicPath:"http://192.168.1.103:8888/"
}
聲明一個變量查找更快 publicPath:website.publicPath 使用webpack命令進行打包,你會發現原來的相對路徑改為了絕對路徑

2. 處理HTML中的圖片

在webpack中是不喜歡你使用標簽來引入圖片的,但是我們作前端的人特別熱衷於這種寫法,國人也為此開發了一個:html-withimg-loader。他可以很好的處理我們在html 中引入圖片的問題,如何把圖片放到指定的文件夾下html-withimg-loader;

npm install html-withimg-loader --save-dev
{
test: /.(htm|html)$/i,
use:[ 'html-withimg-loader']
}

3.)自動處理CSS3屬性前綴:postcss-loader 和 autoprefixer

postCSS推薦在項目根目錄(和webpack.config.js同級),建立一個postcss.config.js文件。

module.exports={
plugins: [
require('autoprefixer') //自動添加前綴插件
]
}
在webpack.dev.cnfig.js中配置:
{
test:/.css$/,
use: extractTextPlugin.extract({
fallback: "style-loader",
use:[{loader:"css-loader"},
{
loader:"postcss-loader",
},
]
})
},

4.消除未使用的CSS 安裝PurifyCSS-webpack

PurifyCSS-webpack要依賴於purify-css這個包,所以兩個都要下載
npm install purifycss-webpack purify-css --save-dev
因為我們需要同步檢查html模板,所以我們需要引入node的glob對象使用。在webpack.dev.config.js文件頭部引入glob
const glob = require('glob');
const PurifyCSSPlugin = require("purifycss-webpack");
new PurifyCSSPlugin({
//這里配置了一個paths,主要是需找html模板,purifycss根據這個配置會遍歷你的文件,查找哪些css被使用了。
paths: glob.sync(path.join(__dirname, 'src/*.html')),
}),

注意: 使用這個插件必須配合extract-text-webpack-plugin這個插件

5)webpack bable 的配置;

npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
//babel 配置
{
test:/.(jsx|js)$/,
use:{
loader:'babel-loader',
options:{
presets:[
"es2015","react"
]
}
},
exclude:/node_modules/
}
5.1)一般是寫到.babelrc 文件夾里
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"stage-0"
]
}
5.2)對比.webpack.dev.config.js里的loader配置
babel 配置
{
test:/.(jsx|js)$/,
use:{
loader:'babel-loader',
},
exclude:/node_modules/
}

參考原文:簡書(素時年錦 )webpack4.x入門配置


免責聲明!

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



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