Babel and Browserify / Webpack confusion
Babel and Browserify / Webpack confusion
快速提问。我对ES2015(ES6)有点困惑。
假设我使用Babel来编译ES6 Javascript以兼容当前浏览器的ES5。
import/export函数在ES6中已经可以通过Babel使用了。那么为什么我需要像Browserify或Webpack这样的东西,如果我只是简单地使用它们来捆绑我的模块,当ES6可以为我做的时候?无论我走到哪里,我都看到人们将Babel与Browserify或Webpack结合使用。虽然我知道Webpack之类的东西可以用于更多,但我想知道是否也可以使用ES6语法来捆绑文件。
我可能在这里完全错了,我可能已经迷失在2016年的Javascript丛林,所以我希望有人可以为我澄清这一点。
编辑
我假设原生ES6导入/导出功能根本不捆绑文件是对的吗?从我读到目前为止,我认为你仍然需要包括所有单独的Javascript文件,但你只是通过使用本地导入功能导入模块到彼此的命名空间?
是的,使用babel将ES6的导入文件转换为ES5就可以了。
然而,使用webpack的一个优点是创建一个静态文件,以便在生产环境中提供服务。
Pre-ES6没有原生模块系统,因此有多个系统是在用户代码中构建的(例如CommonJS/Node模块和AMD)。这些都是Babel将ES6模块语法转换成的(是的,你是正确的,ES6模块语法无论如何都没有原生捆绑故事)。浏览器不知道这些用户域api。Node通过包装一个"模块"来实现它的模块系统。在注入require()
等的函数中。在浏览器中,require()
只是一个参考错误。Browserify(或其他捆绑器)使其在浏览器中工作,并将整个依赖关系图捆绑到单个脚本中。如果代码是针对浏览器的,你可能会想要捆绑它。如果是用于Node,则可能不需要。
导入/导出函数
不是函数,是声明。
如果我只是简单地使用这些只是捆绑我的模块,当ES6可以为我做吗?
我想知道是否也可以使用ES6语法捆绑文件。
我假设原生ES6导入/导出功能根本不捆绑文件是对的吗?
是的。没有原生的方式来捆绑ES6模块。你可以把ES6模块的语法编译成Node模块之类的东西,然后把它们捆绑起来。
从我读到目前为止,我认为你仍然需要包括所有单独的Javascript文件,但你只是通过使用本地导入功能导入模块到彼此的命名空间?
重要的是要认识到,虽然语法是标准化的,但许多行为不是。有一个Loader规范正在开发中,用来指定如何定位和加载模块。
参见https://stackoverflow.com/a/33044085/1034448。
- 如何使用url加载程序在webpack中导入多个图像
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- Webpack开发服务器和React服务器端渲染
- 让Webpack管理Quirky AMD定义的最佳方式
- 什么'在webpack外部设置中,reactDom和reactDom不同
- webpack代码拆分了handlerbs文件——结果是文件很大
- 将webpack和babel与父项目目录中的文件一起使用
- React, Webpack: bundle.js is not generated
- Webpack UglifyJS仍在发出警告消息
- 将require('..')与变量一起使用与在webpack中使用字符串相比
- webpack开发模式和生产构建模式之间有什么区别
- index.html使用webpack开发服务器未重新加载
- 如何在Webpack中从导出中排除供应商模块peerDependencies
- 如何在使用webpack时不解决需求
- 通过Webpack导入模块中的图像
- 使用提取文本webpack插件时出现意外字符
- 如何在不使用require语句的情况下使用webpack加载目录中的所有文件
- 如何使用webpack将全局JS文件包含到我的React项目中
- Webpack-无法使用$.getScript加载bundle.js
- Babel and Browserify / Webpack confusion