vue如何使用bable將es6轉(zhuǎn)譯為es5
為什么使用babel
ECMAScript 6(ES6)的發(fā)展速度非常之快,但現(xiàn)代瀏覽器對(duì)ES6新特性支持度不高,所以要想在瀏覽器中直接使用ES6的新特性就得借助別的工具來(lái)實(shí)現(xiàn)。
Babel是一個(gè)廣泛使用的轉(zhuǎn)碼器,babel可以將ES6代碼完美地轉(zhuǎn)換為ES5代碼,所以我們不用等到瀏覽器的支持就可以在項(xiàng)目中使用ES6的特性。
babel使用
1. 運(yùn)行以下命令安裝所需的包(package)
npm install --save-dev @babel/core @babel/cli @babel/preset-env
2.在項(xiàng)目的根目錄下創(chuàng)建一個(gè)命名為 babel.config.json 的配置文件(需要 v7.8.0 或更高版本)
并將以下內(nèi)容復(fù)制到此文件中:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"edge": "17",
"firefox": "60",
"chrome": "67",
"safari": "11.1"
},
"useBuiltIns": "usage",
"corejs": "3.6.5"
}
]
]
}上述瀏覽器列表僅用于示例。請(qǐng)根據(jù)你所需要支持的瀏覽器進(jìn)行調(diào)整。
參見(jiàn) 此處 以了解 @babel/preset-env 可接受哪些參數(shù)。
如果你使用的是 Babel 的舊版本,則文件名為 babel.config.js。
const presets = [
[
"@babel/preset-env",
{
targets: {
edge: "17",
firefox: "60",
chrome: "67",
safari: "11.1",
},
useBuiltIns: "usage",
corejs: "3.6.4",
},
],
];
module.exports = { presets };3.插件和預(yù)設(shè)(preset)
代碼轉(zhuǎn)換功能以插件的形式出現(xiàn),插件是小型的 JavaScript 程序,用于指導(dǎo) Babel 如何對(duì)代碼進(jìn)行轉(zhuǎn)換。
你甚至可以編寫自己的插件將你所需要的任何代碼轉(zhuǎn)換功能應(yīng)用到你的代碼上。
例如將 ES2015+ 語(yǔ)法轉(zhuǎn)換為 ES5 語(yǔ)法,我們可以使用諸如 @babel/plugin-transform-arrow-functions 之類的官方插件:
npm install --save-dev @babel/plugin-transform-arrow-functions
現(xiàn)在,我們代碼中的所有箭頭函數(shù)(arrow functions)都將被轉(zhuǎn)換為 ES5 兼容的函數(shù)表達(dá)式了:
const fn = () => 1;
// converted to
var fn = function fn() {
return 1;
};這是個(gè)好的開始!但是我們的代碼中仍然殘留了其他 ES2015+ 的特性,我們希望對(duì)它們也進(jìn)行轉(zhuǎn)換。我們不需要一個(gè)接一個(gè)地添加所有需要的插件,我們可以使用一個(gè) “preset” (即一組預(yù)先設(shè)定的插件)。
就像插件一樣,你也可以根據(jù)自己所需要的插件組合創(chuàng)建一個(gè)自己的 preset 并將其分享出去。
J對(duì)于當(dāng)前的用例而言,我們可以使用一個(gè)名稱為 env 的 preset。
npm install --save-dev @babel/preset-env
如果不進(jìn)行任何配置,上述 preset 所包含的插件將支持所有最新的 JavaScript (ES2015、ES2016 等)特性。但是 preset 也是支持參數(shù)的。
我們來(lái)看看另一種傳遞參數(shù)的方法:配置文件,而不是通過(guò)終端控制臺(tái)同時(shí)傳遞 cli 和 preset 的參數(shù)。
配置
根據(jù)你的需要,可以通過(guò)幾種不同的方式來(lái)使用配置文件。另外,請(qǐng)務(wù)必閱讀我們關(guān)于如何 配置 Babel 的深入指南以了解更多信息。
其實(shí)vue 已經(jīng)引入了babel, 檢查package.json是否有依賴 @vue/cli-plugin-babel,只需要配置babel.config.js 和 package.json里添加下面代碼
package.json
"browserslist": [
"> 1%",
"last 2 versions",
"not dead",
"Chrome 40.0", // 兼容低版本谷歌
"ie >= 9" // 兼容ie 9
].babel.config.js
module.exports = {
presets: [
// https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
'@vue/cli-plugin-babel/preset'
],
'env': {
'development': {
// babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
'plugins': ['dynamic-import-node']
}
}
}實(shí)踐
1.在main.js中引入 ,一定要在最頂部引入
import "core-js/stable"; import "regenerator-runtime/runtime";
2.babel.config.js 配置
module.exports = {
presets: [
// '@vue/cli-plugin-babel/preset',
[
// '@babel/preset-env',
'@vue/app',
{
modules: 'commonjs',
useBuiltIns: 'entry',//entry usage
corejs: "3",
debug:true
}
]
],
sourceType: 'unambiguous'
// "plugins": [
// [
// "@babel/plugin-transform-runtime",
// {
// "corejs": 3 // 指定 runtime-corejs 的版本,目前有 2 3 兩個(gè)版本
// }
// ]
// ]
};ie中遇到的問(wèn)題
1.因?yàn)閣ebstorm格式化會(huì)在最后一個(gè)屬性后面加一個(gè),導(dǎo)致ie不兼容。
用eslint 格式化配置將最后一個(gè)逗號(hào)去掉。
在.eslintrc.js中加入
module.exports = {
root: true,
env: {
node: true,
},
extends: ["plugin:vue/essential", "eslint:recommended", "@vue/prettier"],
parserOptions: {
parser: "babel-eslint",
},
rules: {
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
'prettier/prettier': [
process.env.NODE_ENV === 'production' ? 'warn' : 'off',
{
singleQuote: true,
semi: false,
},
],
"comma-dangle": [1, "never"] // 這里就是格式化最后一個(gè)逗號(hào)
},
};2.因?yàn)轫?xiàng)目中用到了sm4等加密方式,babel并沒(méi)有將依賴轉(zhuǎn)義為es5。
所以我們還要再加一個(gè)配置,讓babel轉(zhuǎn)譯我們的依賴。
在vue.config.js中加入配置項(xiàng)
transpileDependencies: [
'sm-crypto',
'bpmn-js',
'bpmn-js-properties-panel',
'diagram-js',
'bpmn-moddle',
'@bpmn-io',
'@bpmn-io/element-templates-validator'
],總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
從vue基礎(chǔ)開始創(chuàng)建一個(gè)簡(jiǎn)單的增刪改查的實(shí)例代碼(推薦)
這篇文章主要介紹了從vue基礎(chǔ)開始創(chuàng)建一個(gè)簡(jiǎn)單的增刪改查的實(shí)例代碼,需要的朋友參考下2018-02-02
Vue.js中自定義Markdown插件實(shí)現(xiàn)References解析(推薦)
本文主要寫的是,如何編寫一個(gè)插件來(lái)解析<references>標(biāo)簽,并將其轉(zhuǎn)換為HTML,這種方法可以應(yīng)用于其他自定義標(biāo)簽和功能,為Vue.js應(yīng)用程序中的Markdown渲染提供了極大的靈活性,感興趣的朋友跟隨小編一起看看吧2024-07-07
使用vue-element-admin框架調(diào)用后端接口及跨域的問(wèn)題
這篇文章主要介紹了使用vue-element-admin框架調(diào)用后端接口及跨域的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Vue3+Vite項(xiàng)目部署后刷新白屏問(wèn)題的解決方法
Vue3 + Vite 項(xiàng)目部署后出現(xiàn)了手動(dòng)刷新頁(yè)面時(shí)出現(xiàn)白屏的問(wèn)題,下面小編就來(lái)和大家探討一下白屏出現(xiàn)的原因以及具體的解決方法,需要的可以參考下2025-03-03
vue移動(dòng)端html5頁(yè)面根據(jù)屏幕適配的四種解決方法
在vue移動(dòng)端h5頁(yè)面當(dāng)中,其中適配是經(jīng)常會(huì)遇到的問(wèn)題,這塊主要有四個(gè)方法可以適用。這篇文章主要介紹了vue移動(dòng)端h5頁(yè)面根據(jù)屏幕適配的四種方案 ,需要的朋友可以參考下2018-10-10
vue3切換路由時(shí)頁(yè)面空白問(wèn)題解決辦法
在使用Vue3時(shí),有時(shí)頁(yè)面修改后會(huì)出現(xiàn)空白,這篇文章主要介紹了vue3切換路由時(shí)頁(yè)面空白問(wèn)題解決辦法,文中介紹的步驟可以有效解決頁(yè)面空白問(wèn)題,需要的朋友可以參考下2024-09-09

