webpack配置 通俗易懂!一步一步會教你
各位看官git上求個星星! 我有趣的前端筆記!!(webpack,babel,typescript,手撕排序演算法等持續更新中!!)
一、初步搭建
1、初始化package.json
yarn init -y
npm init -y
npm會比yarn多scripts 物件
作用:便捷指令
//package.json { "name": "demo1", "version": "1.0.0", "main": "index.js", "license": "MIT", "scripts": { //"test": "echo \"Error: no test specified\" && exit 1" //初始化生成 "build": "webpack" //webpack命令 }, "keywords": [], "author": "", "description": "" }
2、安裝webpack
使用開發者依賴即可
yarn add -D webpack webpack-cli
3、初步實現配置
0、根目錄下 建立webpack.config.js
1、實現打包檔案 自動生成html 並會在html中匯入
- 安裝 html-webpack-plugin 包
- webpack.config.js 匯入包+plugins新建例項
2、入口檔案設定輸出
- 利用entry設定檔案對應打包後的檔名
entry:{ index:'./src/index.js', home:'./src/home.js', page:'./src/page.js' }
- 利用output重構打包後的檔名
//會重新構成打包後的檔名 //[name] 對應上面entry的key值 //[hash] 隨機生成的hash值 :8 是剪下前6位 output:{ filename:'[name].[hash:8].js', //path控制輸出資料夾的名字 [預設dist] path:path.join(__dirname,'release') //前提匯入path模組 需要用絕對路徑!! },
const path = require('path') const HtmlWebpack = require('html-webpack-plugin') module.exports = { //1.編譯打包模式[production/development] mode: 'development', //2.入口檔案設定{換而言之=>要打包的檔案} //多入口寫法 entry: { index: './src/index.js', home: './src/home.js', page: './src/page.js' }, //3.出口檔案設定{對打包好的檔案格式化檔名+修改出口資料夾} output: { filename: '[name].[hash:8].js', path:path.join(__dirname,'release') }, //4.外掛設定=>具體看文件 此處用到自動生成html //html中自動匯入打包好的js //其中的template指向預定好的模板 plugins: [ new HtmlWebpack({ template:'./src/index.html' }) ] }
二、進階之loaders篇
1、樣式
-
style-loader
將模組的匯出作為樣式新增到 DOM 中 -
css-loader
解析 CSS 檔案後,使用 import 載入,並且返回 CSS 程式碼 -
less-loader
載入和轉譯 LESS 檔案 -
sass-loader
載入和轉譯 SASS/SCSS 檔案
在module中新增規則
module:{
rules:[
{
test:/\.(css|less|scss)$/,
use:['style-loader','css-loader','less-loader']
}
]
},
注意:要使用
less-loader
需要先安裝 less-loader和 less
補充:設定全域性的顏色less,可在其他地方引用 @import xxx
//base.less
@primary-color:#ccc;
@background-color:#000;
//index.less
@import './base.less';
.haha{
color: @primary-color;
background-color:@background-color
}
2、如何build出對應的樣式檔案
需要安裝對應外掛從 bundle 中提取文字(CSS)到單獨的檔案
npm install --save-dev extract-text-webpack-plugin
將webpack.config.js的module修改一下
- 1、通過require引入該庫
- 2、先在plugins中註冊一份ExtractTextPlugin
- 3、將rules中每一項設定一個use
//1.引入該庫
const ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports={
//...省略程式碼...
//2.在plugins中註冊一份ExtractTextPlugin
plugins: [
new ExtractTextPlugin("style.css")
],
module:{
//3.將rules中每一項設定一個use
//通過ExtractTextPlugin的extract-api 去指定loader
rules:[
{
test:/\.css$/,
use:ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader'
})
},
{
test:/\.less$/,
// use:['style-loader','css-loader','less-loader']
use:ExtractTextPlugin.extract({
fallback: 'style-loader',
//如果需要,可以在 sass-loader 之前將 resolve-url-loader 連結進來
use: ['css-loader','less-loader']
})
}
]
}
}
補充 :可能會報錯DeprecationWarning: Tapable.plugin is deprecated. Use new API on '.hooks' instead
此處只需將版本更新即可 npm install extract-text-webpack-plugin@next
3、webpack轉換typescript
1、常規轉換typescript方式
- 通過全域性安裝 tsc
- 在通過tsc編譯ts檔案 此時會在ts資料夾下 生成轉換後的js檔案
//全域性安裝 tsc
npm install -g tsc
//tsc編譯
tsc xxx.ts
2、webpack方式轉換typescript
- 安裝ts-loader 和 typescript
yarn add -D ts-loader typescript
- 修改webpack.config.js檔案下的module
module:{
rules:[
{
test:/\.ts$/,
loader:'ts-loader'
}
]
}
- 新增一個 在根目錄下
tsconfig.json
檔案 【固定寫死】
{
"compilerOptions": {
"sourceMap": true
}
}
三、進階之 熱部署
1、 概念:
它允許在執行開發時更新各種模組,而無需進行完全重新整理。
換而言之:修改js,vue儲存後,即可自動編譯+重新整理頁面 無需重新手動編譯
2、熱部署方式(1)
- 引入 webpack
const webpack = require('webpack');
- 增加devServer項 【固定!】
- plugins加入外掛
new webpack.HotModuleReplacementPlugin()
const HtmlWebpack = require('html-webpack-plugin')
+ const webpack = require('webpack');
module.exports = {
entry:{
index:'./src/index.js'
},
mode:'development',
+ devServer:{
+ contentBase:'./dist',
+ hot:true
+ },
plugins:[
+ new webpack.HotModuleReplacementPlugin(), //需要在上方匯入webpack
new HtmlWebpack({
title:'hot module',
template:"./src/index.html"
})
]
}
修改package.json 的 指令
- 安裝 熱部署的庫
npm install -D webpack-dev-server
- 在scripts中新增dev指令 即執行
webpack-dev-server
"scripts": {
"build": "webpack",
"dev": "webpack-dev-server"
},
注意❌:修改html並不能使用熱部署!! 因為html並沒有放在webpack.config.js檔案中打包
3、熱部署方式(2)
此處放置通過 Node.js API官網連結 實用起來感覺沒必要(東西太多+我懶~~)
四、開發和生產環境的不同配置方法
1、定義
開發環境:dev
生產環境:build
常用命令 | webpack.config.js | |
---|---|---|
開發環境 | dev | mode:'development' |
生產環境 | build | mode:'production' |
2、同時配置方法
設定兩個不同的
webpack.prod.config.js
即可 注意 名字不能相同!!!
修改其中的 mode
-
開發環境下的mode =》mode:'development'
-
生產環境下的mode =》mode:'production'
修改package.json的命令入口檔案
"scripts": {
"build": "webpack --config webpack.prod.config.js",
"dev": "webpack-dev-server --config webpack.config.js"
},
五、手動配置vue的webpack
1、安裝vue包和對應的loader
npm install -D vue-loader vue vue-template-compiler
npm install -D babel-loader @babel/core
2、配置webpack.config.js
要想在vue中使用 less lang="less"
<style lang="less" scoped>
.contain{
font-size: 20px;
.first{
color: red;
}
.second{
color: brown;
}
}
</style>
需要修改webpack.config.js
//webpack.config.js
const HtmlWebpack = require('html-webpack-plugin') //build生成html
const webpack = require('webpack')
+ const VueLoaderPlugin = require('vue-loader/lib/plugin') //vue的loader
module.exports = {
mode:'development',
entry:'./src/index.js',
//熱部署
devServer:{
contentBase:'./dist',
hot:true
},
module: {
rules: [
+ {
+ test: /\.vue$/,
+ loader: 'vue-loader'
+ },
// 它會應用到普通的 `.js` 檔案
// 以及 `.vue` 檔案中的 `<script>` 塊
+ {
+ test: /\.js$/,
+ loader: 'babel-loader'
+ },
// 它會應用到普通的 `.css` 檔案
// 以及 `.vue` 檔案中的 `<style>` 塊
{
+ test: /\.css$/,
+ use: [
+ 'vue-style-loader',
+ 'css-loader'
+ ]
}
]
},
plugins:[
//vueloader外掛註冊
+ new VueLoaderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new HtmlWebpack({
template:'./src/index.html'
})
]
}
六、手動配置React的webpack
1、安裝react包和對應的loader
注意:babel-loader一定要裝上 @babel/core
yarn add react react-dom
yarn add -D babel-loader @babel/core
yarn add @babel/preset-env --dev
yarn add @babel/preset-react --dev
2、配置webpack.config.js
新增在 module中新增 rules
module.exports = {
mode:'development',
entry:'./src/index.js',
module:{
+ rules:[
+ {
+ test:/\.(js|jsx)$/,
+ use:[{
+ loader:"babel-loader",
+ options:{
+ presets:[
+ "@babel/preset-react",
+ "@babel/preset-env"
+ ]
+ }
+ }]
+ }]
+ }
+ }
}
七、總結
1、匹配css與less檔案 對應所需的loader
css | less | scss | |
---|---|---|---|
loader | style-loader css-loade |
style-loader css-loader less-loader |
style-loader css-loader sass-loader |
2、兩種匹配寫法(簡單法/可提取css檔案法)
基本寫法
{
test:/\.css$/,
use:[
"style-loader",
"css-loader"
]
},
{
test:/\.less$/,
use:[
"style-loader",
"css-loader",
"less-loader"
]
}
}
可提取css檔案法
上面已經出現 請按住ctrl 點選檢視