vue如何使用bable將es6轉(zhuǎn)譯為es5
為什么使用babel
ECMAScript 6(ES6)的發(fā)展速度非常之快,但現(xiàn)代瀏覽器對ES6新特性支持度不高,所以要想在瀏覽器中直接使用ES6的新特性就得借助別的工具來實現(xiàn)。
Babel是一個廣泛使用的轉(zhuǎn)碼器,babel可以將ES6代碼完美地轉(zhuǎn)換為ES5代碼,所以我們不用等到瀏覽器的支持就可以在項目中使用ES6的特性。
babel使用
1. 運行以下命令安裝所需的包(package)
npm install --save-dev @babel/core @babel/cli @babel/preset-env
2.在項目的根目錄下創(chuàng)建一個命名為 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"
}
]
]
}上述瀏覽器列表僅用于示例。請根據(jù)你所需要支持的瀏覽器進行調(diào)整。
參見 此處 以了解 @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 如何對代碼進行轉(zhuǎn)換。
你甚至可以編寫自己的插件將你所需要的任何代碼轉(zhuǎn)換功能應(yīng)用到你的代碼上。
例如將 ES2015+ 語法轉(zhuǎn)換為 ES5 語法,我們可以使用諸如 @babel/plugin-transform-arrow-functions 之類的官方插件:
npm install --save-dev @babel/plugin-transform-arrow-functions
現(xiàn)在,我們代碼中的所有箭頭函數(shù)(arrow functions)都將被轉(zhuǎn)換為 ES5 兼容的函數(shù)表達式了:
const fn = () => 1;
// converted to
var fn = function fn() {
return 1;
};這是個好的開始!但是我們的代碼中仍然殘留了其他 ES2015+ 的特性,我們希望對它們也進行轉(zhuǎn)換。我們不需要一個接一個地添加所有需要的插件,我們可以使用一個 “preset” (即一組預(yù)先設(shè)定的插件)。
就像插件一樣,你也可以根據(jù)自己所需要的插件組合創(chuàng)建一個自己的 preset 并將其分享出去。
J對于當前的用例而言,我們可以使用一個名稱為 env 的 preset。
npm install --save-dev @babel/preset-env
如果不進行任何配置,上述 preset 所包含的插件將支持所有最新的 JavaScript (ES2015、ES2016 等)特性。但是 preset 也是支持參數(shù)的。
我們來看看另一種傳遞參數(shù)的方法:配置文件,而不是通過終端控制臺同時傳遞 cli 和 preset 的參數(shù)。
配置
根據(jù)你的需要,可以通過幾種不同的方式來使用配置文件。另外,請務(wù)必閱讀我們關(guān)于如何 配置 Babel 的深入指南以了解更多信息。
其實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']
}
}
}實踐
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 兩個版本
// }
// ]
// ]
};ie中遇到的問題
1.因為webstorm格式化會在最后一個屬性后面加一個,導(dǎo)致ie不兼容。
用eslint 格式化配置將最后一個逗號去掉。
在.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"] // 這里就是格式化最后一個逗號
},
};2.因為項目中用到了sm4等加密方式,babel并沒有將依賴轉(zhuǎn)義為es5。
所以我們還要再加一個配置,讓babel轉(zhuǎn)譯我們的依賴。
在vue.config.js中加入配置項
transpileDependencies: [
'sm-crypto',
'bpmn-js',
'bpmn-js-properties-panel',
'diagram-js',
'bpmn-moddle',
'@bpmn-io',
'@bpmn-io/element-templates-validator'
],總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決使用Vue.js顯示數(shù)據(jù)的時,頁面閃現(xiàn)原始代碼的問題
下面小編就為大家分享一篇解決使用Vue.js顯示數(shù)據(jù)的時,頁面閃現(xiàn)原始代碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02
使用vite創(chuàng)建vue3之vite.config.js的配置方式
這篇文章主要介紹了使用vite創(chuàng)建vue3之vite.config.js的配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

