热门标签 | 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


推荐阅读
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
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社区 版权所有