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)容復制到此文件中:
{ "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.插件和預設(preset)
代碼轉(zhuǎn)換功能以插件的形式出現(xiàn),插件是小型的 JavaScript 程序,用于指導 Babel 如何對代碼進行轉(zhuǎn)換。
你甚至可以編寫自己的插件將你所需要的任何代碼轉(zhuǎn)換功能應用到你的代碼上。
例如將 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” (即一組預先設定的插件)。
就像插件一樣,你也可以根據(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ù)你的需要,可以通過幾種不同的方式來使用配置文件。另外,請務必閱讀我們關于如何 配置 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格式化會在最后一個屬性后面加一個,導致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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
解決使用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