網(wǎng)站首頁 編程語言 正文
前端開發(fā)過程中,很可能需要兼容IE瀏覽器(雖然很無奈就是了),在兼容IE瀏覽器時要十分小心,因為IE是不支持es2015以上的,所以你可能會發(fā)現(xiàn)Promise、箭頭函數(shù)等方式通通報錯。
Webpack
前端項目化的過程中,很多都會使用到Webpack
、Gulp
等工具。
這里我使用的是Webpack
,對于Webpack
的項目配置因為以前也具體說過,所以這里不再做過多的講述了。
參考鏈接:
一、使用的javascript
包管理工具是yarn
, 先使用yarn init
命令進(jìn)行項目的創(chuàng)建。
二、使用yarn add
安裝項目所需要的webpack
包
命令:yarn add webpack webpack-cli webpack-dev-server
三、在項目文件夾中創(chuàng)建webpack.config.js
,配置基礎(chǔ)的結(jié)構(gòu)。文件夾中創(chuàng)建需要的入口文件main.js
const path = require('path'); // node自帶包
const webpack = require('webpack');
module.exports = {
// 希望打包的文件
entry:'./main.js',
output:{
filename:'main_out.js', // 輸出文件名稱
path:path.resolve(__dirname,'./build/'), //獲取輸出路徑
},
mode: 'development', // 整個mode 可以不要,模式是生產(chǎn)壞境就是壓縮好對,這里配置開發(fā)壞境方便看生成對代碼
module:{
rules: [
]
},
resolve: {
extensions: ['.js'] // 解析對文件格式
},
devServer: {
hot: false, //開啟熱更新
// 命令行中會顯示打包的進(jìn)度
progress: false,
liveReload: true,
port: 9000,
filename: 'main_out.js',
},
plugins: [
//熱更新插件
new webpack.HotModuleReplacementPlugin()
],
target: ['node', 'es5'], // 這里我提前設(shè)置了es5
}
四、在package.json
中添加scripts
運行命令
"scripts": {
"dev": "webpack --mode development",
"start": "webpack serve --config webpack.config.js --mode development"
}
這樣基礎(chǔ)的webpack
就配置好了,現(xiàn)在我們可以在main.js
中寫一些語句
class A {
a;
constructor(a) {
this.a = a;
}
}
let a1 = new A(10);
console.log(a1);
此時在終端當(dāng)中運行yarn dev
,會生成build文件夾中的main_out.js
文件。
main_out.js的內(nèi)容
使用node
運行main_out.js
,可以看到輸出的結(jié)果
注意: 這里有一個地方,在
webpack.config.js
中我設(shè)置target
為[‘node’, ‘es5’],如果不添加es5
,生成的main_out.js
中會有箭頭函數(shù),這樣如果將main_out.js
引入,在IE瀏覽器當(dāng)中是會出現(xiàn)報錯的。
Babel
通過上面的target配置,可能會讓人以為已經(jīng)能夠讓IE兼容ES6之后的方式。
但是實際上,對于promise、Set、class等使用,還是無法編譯為IE瀏覽器可以使用的js。
在main.js添加以下代碼:
class A {
a;
constructor(a) {
this.a = a;
}
}
let a1 = new A(10);
console.log(a1);
let pro = new Promise((resolve, reject)=>{ });
console.log(pro);
let set = new Set([1,2,3,3,7,8,4,7]);
console.log(set);
在yarn dev
生成main_out.js
,在node運行時或者在chrome瀏覽器中運行都是能正常的。
但是在IE上還是出現(xiàn)了報錯:
安裝Babel
這里就需要引入Babel插件了
介紹: Babel 是一個工具鏈,主要用于將采用 ECMAScript 2015+ 語法編寫的代碼轉(zhuǎn)換為向后兼容的 JavaScript 語法,以便能夠運行在當(dāng)前和舊版本的瀏覽器或其他環(huán)境中。
官方網(wǎng)址: https://www.babeljs.cn/docs/
接下來讓我開始安裝Babel
命令: yarn add @babel/core @babel/cli babel-loader -D
這里的@babel/core
是babel
核心組件,@babel/cli
是Babel 自帶了一個內(nèi)置的 CLI 命令行工具,可通過命令行編譯文件。
除了上述的兩個插件外,接下來需要安裝一些其他需要的babel組件
命令:yarn add @babel/preset-env @babel/polyfill @babel/runtime -D
這里面的
@babel/polyfill
是一個core-js
和generation runtime
的合集,安裝之后在配置文件里配合@babel/preset-env
使用即可。而@babel/runtime
的作用與@babel/polyfill
類似,區(qū)別是它使用了一些helper
函數(shù)來對局部進(jìn)行擴(kuò)展,不會污染全局環(huán)境
配置Babel
接下來就需要配置Babel
一、創(chuàng)建一個.babelrc
文件,這里面寫如Babel需要支持的配置
{
"presets": [
["@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 2, // 新版本的@babel/polyfill包含了core-js@2和core-js@3版本,所以需要聲明版本,否則webpack運行時會報warning
}
]
],
}
二、webpack.config.js
中配置rules
,這里使用exclude
表示哪些目錄中的 .js
文件不要進(jìn)行 babel-loader
rules: [
{
test: /\.js$/,
use: {
loader: 'babel-loader',
},
exclude:'/node_modules/',
}
]
現(xiàn)在我的package中配置如下:
此時再運行yarn dev
,生成的main_out.js
就可以在IE瀏覽器中使用了
注意:因為Babel版本的更迭,所以網(wǎng)上很多教程其實版本可能不太一樣,安裝的插件也不同了。之前我參考一個教程,安裝了Core-js,就一直報錯,可能是產(chǎn)生了沖突,移除后就好了。配置項目真的是趟坑躺過來的…
原文鏈接:https://kongchengji.blog.csdn.net/article/details/120934490
相關(guān)推薦
- 2024-01-30 關(guān)閉idea時出現(xiàn)waiting for process detach解決辦法
- 2022-04-29 DataTable的AcceptChanges()和RejectChanges()方法介紹并實現(xiàn)Da
- 2022-07-11 docker搭建redis 主從哨兵集群
- 2021-12-10 redis服務(wù)器cpu100%的原因和解決方案
- 2024-03-14 Linux Nginx自定義安裝目錄
- 2022-05-22 部署ASP.NET?Core程序到Linux系統(tǒng)_基礎(chǔ)應(yīng)用
- 2023-05-29 SQLSERVER?語句交錯引發(fā)的死鎖問題案例詳解_MsSql
- 2022-04-03 對已有的docker容器增加新的端口映射問題(兩種方式)_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支