繁体   English   中英

Babel和Browserify / Webpack混淆

[英]Babel and Browserify / Webpack confusion

快速提问。 我对ES2015(ES6)有点困惑。

假设我使用Babel将ES6 Javascript编译为与当前浏览器兼容的ES5。

使用Babel, 导入/导出功能已在ES6中提供。 那么,如果我仅在ES6可以为我打包模块时使用它们来捆绑我的模块,那为什么还要使用BrowserifyWebpack之类的东西呢?

在任何地方,我都能看到人们将Babel与Browserify或Webpack结合使用。 尽管我知道可以使用Webpack之类的东西,但是我想知道是否还可以使用ES6语法捆绑文件。

我在这里可能完全错了,可能在2016年的Javascript丛林中迷路了,所以我希望有人可以为我澄清这一点。

编辑

我是否可以假设本机ES6导入/导出功能完全不捆绑文件? 到目前为止,我认为您仍然需要包括所有单独的Javascript文件,但是您可以使用本机导入功能将模块简单地导入到彼此的命名空间中?

是的,使用babel将您的ES6导入到ES5中可以使用。

但是,使用webpack的优点之一是创建了一个静态文件以在生产环境中提供。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM