热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用ES6编写Webpack的配置文件

概述我最近在整顿一个Ionic+Webpack的项目模板,由于项目代码都是ES6的,所以我也想在其他处所也用ES6。个中一个处所就是webpack.config.js。如今有三种要

概述

我最近在整顿一个 Ionic + Webpack 的项目模板,由于项目代码都是 ES6 的,所以我也想在其他处所也用 ES6 。个中一个处所就是 webpack.config.js 。如今有三种要领能够做到这一点,不过各有利弊。

要领 1:升级到 Node.js 4

Node.js 4 兼并了 io.js ,所以天然带有统统 io.js 的特征,个中就包含部份 ES6 特征的支撑。不过如今的版本 (4.2.1) 只支撑部份特征,尤其是以下几个很经常运用的都不支撑:

  1. 函数默认值

  2. 解构和其相干的统统功用

  3. ES6 模块

详细支撑水平可看 这里 。Babel 达到了 71% ,Node.js 4 达到了 53% ,Node.js 5 也只达到了 59% 。真是不容乐观。

总结:这个要领合适依靠少数 ES6 特征,又肯定运用 Node.js 4 及以上版本的人,不能算是群众计划。

要领 2:webpack.config.babel.js

这个最简朴,把 webpack.config.js 更名成 webpack.config.babel.js 就行。统统敕令依旧。Webpack 在实行时会先用 Babel 把设置文件转成 ES5 代码再继承处置惩罚。统统 Babel 支撑的言语特征都能够用。

这是一个 Webpack 支撑,但文档里完全没有提到的特征 (应当立时就会加上)。只需你把设置文件定名成 webpack.config.[loader].js ,Webpack 就会用响应的 loader 去转换一遍设置文件。所以要运用这个要领,你须要装置 babel-loaderbabel-core 两个包。记着你不须要完全的 babel 包。

理论上这类做法支撑任何 loader ,所以你也能够用 CoffeeScript 或许其他言语去写,只需有响应的 loader 就行。

这个要领另有个优点,假如你在 webpack.config.babel.jsimport 了其他文件,谁人文件也会被 Babel 编译。比方:

// webpack.config.babel.js
// 这个文件也能够用 ES6 写
import config from './some-config'
export default {
// webpack config
}

不过,假如你盘算本身写剧本去加载 Webpack 的设置,这个要领就不管用了。

总结:这个要领合适那些不在乎 Node.js 版本,只运用 webpackwebpack-dev-server 敕令,不盘算本身写剧本或过量折腾,但想运用完全的 ES6 特征的人。

要领 3:用 babel-node

这是我在 这个题目 中看到的。个中发问者提到的 React Starter Kit 挺有意义。它没改 webpack.config.js 的文件名,但设置文件和种种剧本都是完全的 ES6 语法。这是怎样做到的呢?

症结就在于 babel-node 。这是 Babel 供应的一个敕令行东西,你能够用它替代 node 去实行文件。文件会被 Babel 编译后再交给 node 敕令实行。

让我们看看 React Starter Kit 怎样应用这一点的。起首它用 package.json 里定义的 scripts 来替代 webpack 敕令。能够看到它完全运用了 babel-node 敕令替代 node 。比方:

{
"scripts": {
"bundle": "babel-node tools/run bundle",
...
}
}

如许就能够用 npm run bundle 来实行响应的使命了。这个敕令会会先挪用 tools/run.js,然后挪用 tools/bundle.js,然后加载 tools/webpack.config.js 。全部流程中的统统文件都是用 ES6 和 ES7 语法写的,异常整齐美丽。

总结:这个要领合适须要本身写剧本而且想用完全的 ES6 语法的人。不过 babel-node 由于要编译,而且换成效果会存在内存中,所以敕令实行时候会比纯真运用 node 要长(主如果启动时候)。这点就见仁见智了。记着不要在临盆环境下用 babel-node

总结

得益于 Babel ,ES6 险些已经是如今的标配了。在不折腾的状况下用用 ES6 是人人都能接收的效果。所以我引荐大部份人用要领 2 。但假如须要写点 npm run xxx 的剧本,不免又会以为不能用 ES6 有点不一致。这类状况我以为要么就都用 ES6 ,要么就干
脆不必。由于我个人以为一致性比用不必 ES6 越发主要。build 剧本委曲也算是后端的一部份,而我们不能强求统统后端代码都写成 ES6 的(比方本身写个 server)。

参考资料

Allow webpack.config.js to be written in ES6
ES6 Compatible Table
StackOverflow – How to use ES6 in Webpack config
React Starter Kit
Babel CLI


推荐阅读
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • npminstall-Dbabelcorebabelpreset-envbabelplugin-transform-runtimebabelpolyfillbabel-loader ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
  • 使用npmi编译vue项目出现无法下载github.com中的对应的包源文件报错信息如下:npmERR!fatal:unabletoaccess'https:github ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
仇顺嵐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有