使用 webpack 配合 babel 搭建一个 ES6+ 转 ES5 Javascript 开发环境

准备知识:

webpack 是时下流行的代码打包工具。
babel 是一个时下流行的代码(语法)转换工具。(详细介绍请参照官网)

1.

你需要知道的是 babel 默认只转换语法,不转换新 api 。新语法例如箭头函数,可以被转换为 ES5 传统模式;但是 Promise 就不会被转换,因为它属于新 api 。所以如果你想兼容旧时代浏览器,就不得不考虑这些:需要有一个用 ES5 语法构成的模拟器函数来模拟实现这些新 api 特性。这就是我们要用到的 polyfill。polyfill 是要被引入至生产环境的,因为它是真实被使用的实现层。polyfill 是一个文件实现所有功能,撰写本文时笔者并没有研究如何按需加载,所以缺点很明显,那就是冗余,毕竟实现是第一关键步骤。

2.

babel 不转换 import 语法,所以笔者在使用 plugin 配合 runtime 时,走到 import _regenerator from ... 这一步时就跪了,选择了使用 webpack 进行配合转译。

一、npm init 之后执行

npm i -D  @babel/core
npm i -D  @babel/preset-env
npm i -D  babel-loader
npm i -D  webpack@3
npm i -D  webpack-cli
npm i -s @babel/polyfill

这里注意,时至撰写本文之时,官网发布的可以配合 babel-loader 的 webapck 需要在版本3 以下,此时最新的 webpack 版本是 4.26.1。
挂一下当前实现后的 package.json

{
  "devDependencies": {
    "@babel/core": "^7.1.6",
    "@babel/preset-env": "^7.1.6",
    "babel-loader": "^8.0.4",
    "webpack": "^3.12.0",
    "webpack-cli": "^3.1.2"
  },
  "dependencies": {
    "@babel/polyfill": "^7.0.0"
  }
}

二、配置 .babelrc

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

三、配置 webpack.config.js

const path = require('path');

module.exports = {
    entry: ["@babel/polyfill",'./index.js'],
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist')
    },
    module:{
        rules:[
        {
            test:/\.js$/,
            exclude: __dirname + 'node_modules',
            // include:__dirname + 'src',       //  目前可有可无
            use:{
                loader:'babel-loader',
                options:{

                    // plugins:["@babel/plugin-transform-arrow-functions"]
                }
            }
        }
        ]
    }
};

注意:关于 babel 的配置你可以选择在 webpack.config.js 中配置,也可以选择在.babelrc中配置,都可以生效,优先级为 .babelrc > webpack.config.js。

四、在 package.json 的 scripts 中添加

  "scripts": {
    "build": "webpack"
  },

之后可以通过命令行

npm run build

进行转译。

五、更简洁的模式

这里会出现一种情况,你为了调试你的代码不得不经常进行编译命令,为了节省你宝贵的开发时间,这里我们使用 webpack-dev-server 和 HotModuleReplacementPlugin 来配合“模块热替换(HMR)”,它可以通过监测你项目中与依赖有关的任何代码变更来自动触发编译过程,省去你不少麻烦事。详情请参见 webpack 官网。在这里笔者只介绍必要的最小操作步骤。

1.安装 webpack-dev-server

npm i -D webpack-dev-server@2

为了配合本文之前的环境请安装 webpack-dev-server 第2版。

package.json

"devDependencies": {
  "webpack-dev-server": "^2.11.3"
}

技巧:每当你在参照官网步骤往下进行,此时发现未知错误且无法通过百度搜索到中文解决方案时,请一定要意识到极可能是插件版本不匹配。

  1. package.json 添加命令
  "scripts": {
    "start": "webpack-dev-server --open"
  },

3.配置 webpack.config.js

const path = require("path");
const webpack = require("webpack");

module.exports = {
    entry: ["@babel/polyfill", "./index.js"],
    devServer: {
        contentBase: path.join(__dirname, "dist"), 
        // hot:true,    //默认值为 true,所以可以不用设置
        port: 9000,
        // watchOptions: {
        //  poll: 1000
        // }
    },
    output: {
        filename: "bundle.js",
        path: path.resolve(__dirname, "dist")
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: __dirname + "node_modules",
                use: {
                    loader: "babel-loader"
                }
            }
        ]
    },
    plugins: [new webpack.HotModuleReplacementPlugin()]
};

注:dist 目录下应该有一个 .html 并且此 html 文件引用的是你编译后的文件。

至此,你可以通过启用 npm start 来启动你的小型服务器了。

备注:如此做法可以向下兼容至 ie9。

作者知识水平有限,如有错误,敬请交流指正。

------------ 结束线 ---------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容