成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用 Webpack 與 Babel 配置 ES6 開(kāi)發(fā)環(huán)境

kelvinlee / 3151人閱讀

摘要:而是一個(gè)智能預(yù)設(shè),允許您使用最新的,而無(wú)需微觀管理您的目標(biāo)環(huán)境需要哪些語(yǔ)法轉(zhuǎn)換以及可選的瀏覽器。啟用將模塊語(yǔ)法轉(zhuǎn)換為其他模塊類型,設(shè)置為不會(huì)轉(zhuǎn)換模塊。最后,配置兼容的瀏覽器環(huán)境。

使用 Webpack 與 Babel 配置 ES6 開(kāi)發(fā)環(huán)境 安裝 Webpack

安裝:

# 本地安裝
$ npm install --save-dev webpack webpack-cli

# 全局安裝
$ npm install -g webpack webpack-cli

在項(xiàng)目根目錄下新建一個(gè)配置文件—— webpack.config.js 文件:

const path = require("path");

module.exports = {
  mode: "none",
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  }
}

在 src 目錄下新建 a.js 文件:

export const isNull = val => val === null

export const unique = arr => [...new Set(arr)]

在 src 目錄下新建 index.js 文件:

import { isNull, unique } from "./a.js"

const arr = [1, 1, 2, 3]

console.log(unique(arr))
console.log(isNull(arr))

執(zhí)行編譯打包命令,完成后打開(kāi) bundle.js 文件發(fā)現(xiàn) isNull 和 unique 兩個(gè)函數(shù)沒(méi)有被編譯,和 webpack 官方說(shuō)法一致:webpack 默認(rèn)支持 ES6 模塊語(yǔ)法,要編譯 ES6 代碼依然需要 babel 編譯器。

安裝配置 Babel 編譯器

使用 Babel 必須先安裝 @babel/core 和 @babel/preset-env 兩個(gè)模塊,其中 @babel/core 是 Babel 的核心存在,Babel 的核心 api 都在這個(gè)模塊里面,比如:transform。而 @babel/preset-env 是一個(gè)智能預(yù)設(shè),允許您使用最新的 JavaScript,而無(wú)需微觀管理您的目標(biāo)環(huán)境需要哪些語(yǔ)法轉(zhuǎn)換(以及可選的瀏覽器polyfill)。因?yàn)檫@里使用的打包工具是 Webpack,所以還需要安裝 babel-loader 插件。

安裝:

$ npm install --save-dev @babel/core @babel/preset-env babel-loader

新建 .babelrc 文件:

{
  "presets": [
    "@babel/preset-env"
  ]
}

修改 webpack 配置文件(webpack.config.js):

const path = require("path");

module.exports = {
  mode: "none",
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /.js$/,
          loader: "babel-loader",
          exclude: /node_modules/
      }
    ]
  }
}

由于 babel 默認(rèn)只轉(zhuǎn)換 ES6 新語(yǔ)法,不轉(zhuǎn)換新的 API,如:Set、Map、Promise等,所以需要安裝 @babel/polyfill 轉(zhuǎn)換新 API。安裝 @babel/plugin-transform-runtime 優(yōu)化代碼,@babel/plugin-transform-runtime 是一個(gè)可以重復(fù)使用 Babel 注入的幫助程序代碼來(lái)節(jié)省代碼的插件。

安裝 @babel/polyfill、@babel/plugin-transform-runtime 兩個(gè)插件:

$ npm install --save-dev @babel/polyfill @babel/plugin-transform-runtime

修改 .babelrc 配置文件:

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage", // 在每個(gè)文件中使用polyfill時(shí),為polyfill添加特定導(dǎo)入。利用捆綁器只加載一次相同的polyfill。
      "modules": false // 啟用將ES6模塊語(yǔ)法轉(zhuǎn)換為其他模塊類型,設(shè)置為false不會(huì)轉(zhuǎn)換模塊。
    }]
  ],
  "plugins": [
    ["@babel/plugin-transform-runtime", {
      "helpers": false
    }]
  ]
}

最后,配置兼容的瀏覽器環(huán)境。在 .babelrc 配置文件中設(shè)置 targets 屬性:

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "modules": false,
      "targets": {
        "browsers": "last 2 versions, not ie <= 9"
      }
    }]
  ],
  "plugins": [
    ["@babel/plugin-transform-runtime", {
      "helpers": false
    }]
  ]
}

執(zhí)行命令編譯代碼,完成后檢查 bundle.js 文件,是否成功轉(zhuǎn)換新 API 。如果發(fā)現(xiàn)以下代碼即說(shuō)明轉(zhuǎn)換成功:

// 23.2 Set Objects
module.exports = __webpack_require__(80)(SET, function (get) {
  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
  // 23.2.3.1 Set.prototype.add(value)
  add: function add(value) {
    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
  }
}, strong);

其他關(guān)于 js 壓縮和 Webpack 啟用 tree shaking 功能的設(shè)置本文不在贅述。

配置文件詳情概覽

package.json 文件:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1",
    "dev": "webpack"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.3.4",
    "@babel/plugin-transform-runtime": "^7.3.4",
    "@babel/polyfill": "^7.2.5",
    "@babel/preset-env": "^7.3.4",
    "babel-loader": "^8.0.5",
    "webpack": "^4.29.6",
    "webpack-cli": "^3.2.3"
  }
}

webpack.config.js 文件:

const path = require("path");

module.exports = {
  mode: "none",
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist")
  },
  module: {
    rules: [
      {
        test: /.js$/,
          loader: "babel-loader",
          exclude: /node_modules/
      }
    ]
  }
}

.babelrc 文件:

{
  "presets": [
    ["@babel/preset-env", {
      "useBuiltIns": "usage",
      "modules": false,
      "targets": {
        "browsers": "last 2 versions, not ie <= 9"
      }
    }]
  ],
  "plugins": [
    ["@babel/plugin-transform-runtime", {
      "helpers": false
    }]
  ]
}
符錄

usuallyjs 項(xiàng)目是本人最近建設(shè)的開(kāi)源項(xiàng)目,歡迎感興趣的同行交流。

usuallyjs: https://github.com/JofunLiang/usuallyjs

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109112.html

相關(guān)文章

  • webpack 項(xiàng)目構(gòu)建:(二)ES6 編譯環(huán)境搭建

    摘要:本質(zhì)就是一個(gè)編譯器,通過(guò)將源代碼解析成抽象語(yǔ)法樹(shù)將源代碼的結(jié)果一系列轉(zhuǎn)換生成目標(biāo)代碼的將目標(biāo)代碼的轉(zhuǎn)換成代碼。項(xiàng)目構(gòu)建三開(kāi)發(fā)環(huán)境本地服務(wù)器搭建源碼下載地址參考資料入門(mén)阮一峰中文文檔中文網(wǎng) 注:以下教程均在 windows 環(huán)境實(shí)現(xiàn),使用其他操作系統(tǒng)的同學(xué)實(shí)踐過(guò)程可能會(huì)有些出入。 ??在上一章 webpack 項(xiàng)目構(gòu)建:(一)基本架構(gòu)搭建 我們搭建了一個(gè)最基本的 webpack 項(xiàng)目,現(xiàn)...

    marser 評(píng)論0 收藏0
  • ES6-開(kāi)發(fā)環(huán)境搭建(1)

    摘要:全局安裝本地安裝轉(zhuǎn)碼規(guī)則安裝完成后,我們可以看一下我們的文件,已經(jīng)多了選項(xiàng)。直接在線編譯提供一個(gè)在線編譯器,可以在線將代碼轉(zhuǎn)為代碼。 古語(yǔ)有云:君子生非異也,善假于物;工欲善其事,必先利其器。 由于有些低版本的瀏覽器還是不支持ES6語(yǔ)法,學(xué)習(xí)ES6,首先要學(xué)會(huì)搭建一個(gè)基本的ES6開(kāi)發(fā)環(huán)境,利用工具,把ES6的語(yǔ)法轉(zhuǎn)變成ES5的語(yǔ)法。 1、使用Babel把ES6編譯成ES5 1...

    android_c 評(píng)論0 收藏0
  • webpack多頁(yè)應(yīng)用架構(gòu)系列(八):教練我要寫(xiě)ES6!webpack怎么整合Babel

    摘要:本文首發(fā)于的技術(shù)博客實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。只是最近學(xué)習(xí)生態(tài),用起來(lái)轉(zhuǎn)換之余,也不免碰到諸多用上的教程案例,因此便稍作學(xué)習(xí)。在當(dāng)前的瀏覽器市場(chǎng)下,想在生產(chǎn)環(huán)境用上,是必不可少的。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000006992218如果您對(duì)本系列文章感興...

    gnehc 評(píng)論0 收藏0
  • webpack 大法好 ---- 基礎(chǔ)概念配置(1)

    摘要:不信你命令行里敲個(gè)試試敲敲敲當(dāng)然了想直接運(yùn)行命令,你需要將添加到系統(tǒng)變量啊。全局安裝相同的,運(yùn)行命令耐心等待安裝完成后,你的系統(tǒng)變量里就存在命令了,你可以運(yùn)行下試試。上訴如果有不懂的,歡迎留言。 再一次見(jiàn)面! Light 還是太太太懶了,距離上一篇沒(méi)啥營(yíng)養(yǎng)的文章已經(jīng)過(guò)去好多天。今天為大家介紹介紹 webpack 最基本的概念,以及簡(jiǎn)單的配置,讓你能快速得搭建一個(gè)可用的 webpack ...

    QLQ 評(píng)論0 收藏0
  • Webpack系列——手把手教你使用Webpack搭建簡(jiǎn)易的React開(kāi)發(fā)環(huán)境

    摘要:在這篇文章中我們開(kāi)始利用我們之前所學(xué)搭建一個(gè)簡(jiǎn)易的開(kāi)發(fā)環(huán)境,用以鞏固我們之前學(xué)習(xí)的知識(shí)。 文章首發(fā)于我的github及個(gè)人博客,github請(qǐng)看https://github.com/huruji/blo...,轉(zhuǎn)載請(qǐng)注明出處。 在這篇文章中我們開(kāi)始利用我們之前所學(xué)搭建一個(gè)簡(jiǎn)易的React開(kāi)發(fā)環(huán)境,用以鞏固我們之前學(xué)習(xí)的Webpack知識(shí)。首先我們需要明確這次開(kāi)發(fā)環(huán)境需要達(dá)到的效果:1、...

    cucumber 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<