webpack4打包工具

什么是webpack

webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。當 webpack 處理應用程序時,它會遞歸地構建一個依賴關系圖(dependency graph),其中包含應用程序需要的每個模塊,然后將所有這些模塊打包成一個或多個 bundle

可以做的事情

代碼轉換、文件優化、代碼分割、模塊合并、自動刷新、代碼校驗、自動發布
復制代碼

需要提前掌握的內容

  • 需要node基礎,以及npm的使用
  • 掌握es6語法

主要學習webpack哪些內容

  • webpack常見配置
  • webpack高級配置
  • webpack優化策略
  • ast抽象語法樹
  • webpack中的Tapable
  • 掌握webpack流程,手寫webpack
  • 手寫webpack中常見的loader
  • 手寫webpack中常見的plugin

創建文件

mkdir webpack-test && cd webpack-test
mkdir src
touch src/index.js
復制代碼

初始化文件

npm init -y  初始文件(默認的)
npm init 
復制代碼

開始打包

npx webpack
復制代碼

配置webpack.config.js

touch webpack.config.jsconst path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {devServer: { // 開發服務器的配置contentBase: path.join(__dirname, 'dist'),compress: true,port: 3000},mode: 'development', // 模式 默認兩種production developmententry: './src/index.js', //入口output: {filename: 'bundle.js', //打包后的文件名path: path.resolve(__dirname, 'dist'), //路徑必須是一個絕對路徑},plugins: [// 數組放著所有的webpack插件new HtmlWebpackPlugin({template: './src/index.html',filename: 'index.html'})]
}
復制代碼

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head>
<body><div id="root"></div><script src="bundle.js"></script>
</body>
</html>
復制代碼

index.js

var root = document.getElementById("root");
root.innerHTML="你好"
復制代碼

webpack常見配置

npm i webpack webpack-cli -D
npm i html-webpack-plugin -D
復制代碼

使用模板 html

  • html-webpack-plugin 可以指定template模板文件,將會在output目錄下,生成html文件,并引入打包后的js.
npm i  html-webpack-plugin -D
復制代碼

webpack-dev-server

  • webpack-dev-server提供了一個簡單的Web服務器和實時熱更新的能力
npm i webpack-dev-server -D
復制代碼

pagkage.js

{"name": "webpack-test","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","dev": "webpack-dev-server","build": "webpack"},"keywords": [],"author": "","license": "ISC","devDependencies": {"html-webpack-plugin": "^3.2.0","webpack": "^4.30.0","webpack-cli": "^3.3.0","webpack-dev-server": "^3.3.1"}
}復制代碼

目前的目錄

啟動項目

npm run dev
復制代碼

瀏覽器輸入http://localhost:3000/

加載樣式文件

  • 在src目錄下創建一個index.css
body{background-color:red;
}
復制代碼
  • 在index.js中引入index.css
require('./index.css');
復制代碼
  • webpack.config.js增加一些參數
module: { //模塊rules: [ // 規則 css-loader //  style-loader 把css插入到head的標簽中//  loader的特點: 希望單一//  loader的用法: 字符串只用一個loader//  多個loader需要[]//  loader的順序 默認是從右向左執行//  loader還可以寫出對象方式{test: /\.css$/,use: ['style-loader','css-loader']},]
}
復制代碼
  • css-loader style-loader
npm i  css-loader style-loader -D
復制代碼
  • 效果如下

加載less(sass,stylus類似)

  • 在src目錄下創建一個index.less
body{#root{border:1px yellow solid;color: #000;}
}
復制代碼
  • 在index.js中引入index.less
require('./index.css');
復制代碼
  • webpack.config.js增加一些參數
 {test: /\.less$/,use: [{loader: 'style-loader',},'css-loader','less-loader']},
復制代碼
  • less-loader
npm i less less-loader -D
復制代碼
  • 效果如下

提取單獨打包css文件

npm i mini-css-extract-plugin -D
復制代碼
  • webpack.config.js增加一些參數
const MiniCssExtractPlugin = require('mini-css-extract-plugin');plugins: [ new MiniCssExtractPlugin({filename: 'main.css'})],
module: { //模塊use: [MiniCssExtractPlugin.loader,]},{test: /\.less$/,use: [MiniCssExtractPlugin.loader,]}]}
復制代碼

css3樣式自動加前綴

npm i postcss-loader autoprefixer -D
復制代碼
  • 在webpack-test創建postcss.config.js
module.exports = {plugins: [require('autoprefixer')]
}
復制代碼
  • webpack.config.js增加一些參數
{test: /\.css$/,use: [{loader: 'style-loader',//    options: {//        insertAt: 'top' //內聯樣式最高級//    }},'css-loader','postcss-loader']},{test: /\.less$/,use: [{loader: 'style-loader',},'css-loader','postcss-loader','less-loader']
}
復制代碼

轉化es6語法

npm i babel-loader @babel/core @babel/preset-env -D
npm i @babel/plugin-proposal-class-properties -D
復制代碼
  • webpack.config.js增加一些參數
rules: [ 
{
test: /\.js$/,
use: {loader: 'babel-loader',options: { // 用babel-loader 需要把es6-es5presets: ['@babel/preset-env'],plugins: ['@babel/plugin-proposal-class-properties']}
}
] 
復制代碼

全局變量引入

npm i jquery -D
npm i expose-loader -D
復制代碼

第一種

  • import $ from 'jquery';
  • webpack.config.js增加一些參數
 rules: [ {test: require.resolve('jquery'),use: 'expose-loader?$'},
]
復制代碼

第二種

  • webpack.config.js增加一些參數
const webpack = require('webpack');
plugins: [ // 數組放著所有的webpack插件new webpack.ProvidePlugin({$: 'jquery' // 在每個模塊中注入$對象})
],
復制代碼

引入圖片處理

// 1.在js中創建圖片來引入
// 2.在css引入backgroud('url')
// 3.<img src="" alt="" />>
npm i file-loader -D
npm i html-withimg-loader -D
復制代碼
  • webpack.config.js增加一些參數
rules: [ {test: /\.html$/,use: 'html-withimg-loader'},{test: /\.(png|jpg|gif)$/,use: 'file-loader'},
]
復制代碼
  • 限制圖片大小
npm i url-loader -D
復制代碼
  • webpack.config.js增加一些參數
 {test: /\.(png|jpg|gif)$/,use: {loader: 'url-loader',options: {limit: 200*1024}}
復制代碼

images和css打包分類

  • webpack.config.js增加一些參數
 plugins: [ // 數組放著所有的webpack插件new MiniCssExtractPlugin({filename: 'css/main.css'}),
],
{test: /\.(png|jpg|gif)$/,use: {loader: 'url-loader',options: {limit: 1,outputPath: '/img/',publicPath: 'https://www.baidu.com' // 在圖片上加域名}}
復制代碼

多頁面打包

  • 在scr創建一個other.js
console.log("other 一路走好!")
復制代碼
  • webpack.config.js增加一些參數
// 多入口
entry: {index: './src/index.js', home: './src/other.js',
},
output: {filename: '[name].js', //打包后的文件名path: path.resolve(__dirname, 'dist'), //路徑必須是一個絕對路徑// publicPath: 'https://www.baidu.com'
},
plugins: [ // 數組放著所有的webpack插件new HtmlWebpackPlugin({template: './src/index.html',filename: 'index.html',chunks: ['index']}),new HtmlWebpackPlugin({template: './src/index.html',filename: 'home.html',chunks: ['home']}),
]
復制代碼

配置source-map調試代碼

  • webpack.config.js增加一些參數
output: {filename: '[name].js', //打包后的文件名path: path.resolve(__dirname, 'dist'), //路徑必須是一個絕對路徑// publicPath: 'https://www.baidu.com'
},
// devtool: 'source-map', // 1.增加映射文件 可以幫我們調試源代碼
// devtool: 'eval-source-map', // 2.不會產生單獨的文件,但是可以顯示行和列
// devtool: 'cheap-module-source-map', // 3.不會產生列,但是是一個單獨的映射文件(產生后你可以保留起來)
devtool: 'cheap-module-eval-source-map',// 4.不會長生文件,集成在打包后的文件中不會產生列
復制代碼

watch實時打包

  • webpack.config.js增加一些參數
entry: {index: './src/index.js', home: './src/other.js',
},
watch: true,
watchOptions: { // 監控的選項poll: 1000, // 每秒問我1000次aggregateTimeout: 500, // 防抖ignored: /node_modules/ // 不需要進行監控哪個文件
},
復制代碼

常用的小插件

  • 清除dist (clean-webpack-plugin)
  • 拷貝文件(copy-webpack-plugin)
  • 版權注釋(bannerPlugin)
npm i clean-webpack-plugin -D
npm i copy-webpack-plugin -D
復制代碼
  • 在webpack-test創建doc文件,里面創建hello.txt
  • webpack.config.js增加一些參數
const webpack = require('webpack');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
plugins: [ new CleanWebpackPlugin(),new CopyWebpackPlugin([{from: 'doc', to: './'}]),new webpack.BannerPlugin('cl by 2019')
],
復制代碼

webpack跨域問題

npm i express -D
復制代碼
  • 1)webpack代理
  • 在webpack-test目錄下創建server.js
let express = require('express');
let app = express();
app.get('/user', (req, res)=> {res.json({ name: "xiaolin3333" })
})
app.listen(3000);
復制代碼
  • webpack.config.js配置
 devServer: { // 開發服務器的配置// 1)http:proxyproxy: {// 重新的方式 把請求代理到express服務器!'/api': {target: 'http://localhost:3000',pathRewrite: {'/api': ''}} // 配置了一個代理}},
復制代碼
  • index.js
let xhr = new XMLHttpRequest();xhr.open('GET', '/api/user', true);xhr.onload = function() {console.log(xhr.response,);
}xhr.send();
復制代碼
  • 啟動 node server.js && npm run dev
  • 2)前端只想單純來模擬數據
  • webpack.config.js配置
devServer: { // 開發服務器的配置// 2)前端只想單純來模擬數據before(app) { // 提供的方法 鉤子app.get('/user', (req, res)=> {res.json({ name: "xiaolinwww" })})}
復制代碼
  • index.js
let xhr = new XMLHttpRequest();
xhr.open('GET', '/user', true);xhr.onload = function() {console.log(xhr.response,);
}xhr.send();
復制代碼
  • 啟動 npm run dev
  • 3)有服務端 不想用代理來處理 能不能再服務端中啟動webpack端口用服務端口
npm i webpack-dev-middleware -D
復制代碼
  • server.js
let express = require('express');let app = express();
let webpack = require('webpack');// 中間件
let middle = require('webpack-dev-middleware');let config = require('./webpack.config');let compiler = webpack(config);app.use(middle(compiler));app.get('/user', (req, res)=> {res.json({ name: "xiaolin3333-webpack-dev-middleware" })
})app.listen(3000);
復制代碼
  • index.js
let xhr = new XMLHttpRequest();
xhr.open('GET', '/user', true);xhr.onload = function() {console.log(xhr.response,);
}xhr.send();
復制代碼
  • 啟動 node server && http://localhost:3000/

resolve屬性的配置

yarn add css-loader style-loader -D
復制代碼
  • index.js
import './style';style.cssbody{background-color:green;transform: rotate(90deg);
}
復制代碼
  • webpack.config.js配置
resolve: {// 解析第三方包 commonmodules: [path.resolve('node_modules')],extensions: ['.js','.css','.vue']
//    alias: { // 別名 vue vue.runtime
//       bootstrap: 'bootstrap/dist/css/bootstrap.css'
//    },
//    mainFields: ['style', 'main']
//    mainFields: [],// 入口文件的名字index.js
},module: { //模塊rules: [ {test: /\.css$/,use: ['style-loader','css-loader']},]
}
復制代碼

項目文件未更新

  • github.com/chenlin1/we…

今天到此結束,明天更新。。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536533.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536533.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過計算機網絡進行的商務活動包括,電子商務練習題及答案

“電子商務”練習題一、填空題1&#xff0e;EDI系統構成三要素包括數據標準化、(EDI軟件及硬件)和(通信網絡)。2.B2C電子商務模式主要有&#xff1a;門戶網站、(電子零售商)、(內容提供商)、(交易經紀人)和社區服務商。3. 影響消費者網上購物的因素&#xff1a;商品特性、(商品…

PAKDD 2019 都有哪些重要看點?看這篇文章就夠了!...

雷鋒網 AI 科技評論按&#xff1a;亞太地區知識發現與數據挖掘國際會議&#xff08;Pacific Asia Knowledge Discovery and Data Mining&#xff0c;PAKDD&#xff09;是亞太地區數據挖掘領域的頂級國際會議&#xff0c;旨在為數據挖掘相關領域的研究者和從業者提供一個可自由 …

「javaScript-每三位插入一個逗號實現方式」

一道火了很久的面試題&#xff0c;//將以下數字從小數點前開始每三位數加一個逗號var num 1234567890.12345;復制代碼相信大家寫了這么久的前端代碼&#xff0c;不論是培訓也好&#xff0c;面試也好&#xff0c;這種題出現的頻率挺高的&#xff0c;網上方法很多&#xff0c;但…

計算機網絡df例題,計算機網絡期末試題北交.doc

計算機網絡期末試題北交北京交通大學 2007-2008學年 第學期考試試題課程名稱&#xff1a;計算機通信與網絡技術 出題人&#xff1a;網絡課程組題 號一二三五總分得 分簽 字選擇題(每題分&#xff0c;共0分)PING命令使用協議的報文A、TCP ?? ?B、UDP ??????????C、…

java B2B2C 仿淘寶電子商城系統-Spring Cloud Feign的文件上傳實現

在Spring Cloud封裝的Feign中并不直接支持傳文件&#xff0c;但可以通過引入Feign的擴展包來實現&#xff0c;本文就來具體說說如何實現。需要JAVA Spring Cloud大型企業分布式微服務云構建的B2B2C電子商務平臺源碼 一零三八七七四六二六 服務提供方&#xff08;接收文件&#…

2021計算機三級網絡技術教程,全國計算機等級考試三級教程——網絡技術(2021年版)...

前輔文第一單元 網絡規劃與設計第1章 網絡系統結構與設計的基本原則1.1 基礎知識1.2 實訓任務習題第2章 中小型網絡系統總體規劃與設計方法2.1 基礎知識2.2 實訓任務習題第3章 IP地址規劃設計技術3.1 基礎知識3.2 實訓任務習題第4章 路由設計基礎4.1 基礎知識4.2 實訓任務習題第…

subline Text3 插件安裝

--沒有解決&#xff0c;換了vscode 安裝Package Control 這是必須的步驟&#xff0c;安裝任何插件之前需要安裝這個 自動安裝的方法最方便&#xff0c;只需要在控制臺&#xff08;不是win的控制臺&#xff0c;而是subline 的&#xff09;里粘貼一段代碼就好&#xff0c;但是由…

大學計算機基礎書本里的畢業論文源稿,計算機基礎畢業論文范文

計算機基礎畢業論文范文導語&#xff1a;關于大學計算機基礎的教學&#xff0c;需要不斷探索與實踐&#xff0c;實現更好的教學。下面是小編帶來的計算機基礎畢業論文&#xff0c;歡迎閱讀與參考。論文&#xff1a;大學計算機基礎教學的探索與實踐摘要&#xff1a;大學計算機基…

p批處理替換目錄下文本中的字符串

echo offrem 進入批處理文件所在的路徑 cd C:\Users\zxh\Desktop\123echo ***** Replace "123" as "abc" ***** rem 定義要替換的新舊字符串 set strOld123 set strNewabcrem 定義變量修改本地化延期 setlocal enabledelayedexpansionrem 循環取出要處理的…

計算機技術基礎 VB 答案,《計算機技術基礎(VB)》武漢理工大學20春作業一

計算機技術基礎(VB)_作業一1.[判斷題] 寫在一行上的多條語句&#xff0c;應以逗號作為分隔符。奧鵬作業答案可以聯系QQ 761296021A.正確B.錯誤正確答案:——B——2.[判斷題] 滾動條的最小值、最大值、最小變動值、最大變動值屬性均可自行設計。A.正確B.錯誤正確答案:——A——3…

公務員計算機考試題庫,公務員考試題庫

2019年上半年&#xff0c;我國服務進出口總額達到26124.6億元&#xff0c;同比增長2.6%。其中&#xff0c;出口總額9333.7億元&#xff0c;同比增長9.0%&#xff1b;進口總額16790.8億元&#xff0c;同比下降0.6%。服務進出口總額占對外貿易總額的比重達到15.1%&#xff0c;比2…

Spring MVC 實現Excel的導入導出功能(2:Excel的導入優化和Excel的導出)

Excel的導入V2優化版 有些時候文件上傳這一步驟由前端來處理&#xff0c;只將上傳后的 URL 傳輸給后端&#xff08;可以參考上一文中的圖片上傳功能&#xff09;&#xff0c;也就是導入請求中并不會直接處理 MultipartFile 對象&#xff0c;而是通過文件 URL 將其下載&#xff…

計算機系統應用屬于ei,2018年度中心成員發表論文清單(SCI、EI收錄)

序號論文名稱作者發表時間發表刊物名及ISSN號論文類別(SCI(請寫明幾區)、EI、AB類刊物、CSCD)1Power Allocation Study for Non-Orthogonal Multiple Access Networks With Multicast-Unicast TransmissionZheng Yang , Member, IEEE, Jamal Ahmed Hussein , Peng Xu , Member,…

ts基礎總結

ts有什么用 類型檢查, 擁抱es6&#xff0c;支持部分的esNext草案&#xff0c;直接編譯到原生js、引入新的語法糖 為什么用ts TypeScript的設計目的應該是解決JavaScript的“痛點”&#xff1a;弱類型和沒有命名空間&#xff0c;導致很難模塊化&#xff0c;不適合開發大型程序。…

CentOS7啟用SELinux和Firewall修改ssh端口號

基本信息 CentOS :CentOS Linux release 7.6.1810 (Core)SELinux:enforcedFirewall:enforcing生成ssh密鑰對 生成密鑰對 ssh-keygen -t rsa -b 2048 #默認存放的位置是/home/user/.ssh&#xff0c;使用的是公鑰id_rsa.pub從服務器中將私鑰復制到本機或者使用本地生成的密鑰對&a…

華為智能手環智能手表軟件測試,一塊智能手表的測試之旅,揭秘華為運動健康科學實驗室...

隨著消費者對健康生活的日益關注&#xff0c;隨之而來的是智能可穿戴設備的蓬勃發展。一個手環&#xff0c;一個智能手表&#xff0c;都可以為消費者提供諸如心率&#xff0c;步數相關的數據統計。而更進階的設備&#xff0c;則能為用戶提供系統的運動解決方案以及監控人體健康…

Flutter 使用動畫播放一組圖片

請支持原文&#xff1a;tryenough.com/images-anim… 效果如下圖&#xff1a; 代碼 import package:flutter/material.dart; import package:sprintf/sprintf.dart; //這個是一個拼接字符串的flutter庫&#xff0c;主要是為了使用方便&#xff0c;你可以選擇不使用&#xff0c…

軟件測試都有哪些證書,軟件測試都有哪些證書呀?有用嗎?

OYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學習論壇 www.oywp.netOYWP學…

超低頻測試信號產生電路軟件流程圖,一種0_20Hz超低頻信號發生器的設計與實現...

。。第22卷第4期增刊           儀 器 儀 表 學 報             2001年8月一種0&#xff5e;20Hz超低頻信號發生器的設計與實現馬彥恒 郭 利 于久恩 (軍械工程學院 石家莊 050003)摘要 本文介紹了一種采用了主—從式雙CPU結構,頻率和幅度都…

datastage 使用小結

轉載于:https://www.cnblogs.com/Guhan-xue/p/10758663.html