Babel和Browserify/Webpack混淆

Ste*_*n-v 10 javascript ecmascript-6

快问.我对ES2015(ES6)感到有点困惑.

假设我使用Babel将ES6 Javascript编译为符合当前浏览器的ES5.

导入/导出功能已经可以在ES6用巴贝尔.那么,为什么我需要像BrowserifyWebpack这样的东西,如果我只是简单地使用它们来捆绑我的模块,那么ES6可以为我做这件事吗?

无论我走到哪里,我都会看到人们将Babel与Browserify或Webpack结合使用.虽然我知道像Webpack这样的东西可以用于更多,但我想知道是否也可以使用ES6语法捆绑文件.

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

编辑

我是否正确地假设原生ES6导入/导出功能根本不捆绑文件?从我到目前为止所读到的内容,我认为你仍然需要包含所有单独的Javascript文件,但是你只需使用本机导入功能将模块导入到每个其他命名空间中?

小智 5

是的,使用babel将您的ES6导入转换为ES5将起作用.

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


JMM*_*JMM 1

ES6 之前的版本没有原生模块系统,因此有多个在用户态代码中构建的系统(例如 CommonJS / Node 模块和 AMD)。这些就是 Babel 将 ES6 模块语法转换为的内容(是的,你是对的,ES6 模块语法无论如何都没有原生捆绑故事)。浏览器不了解这些用户态 API。Node 通过将“模块”包装在注入等的函数中来实现其模块系统。require()在浏览器中require()只是一个引用错误。Browserify(或其他捆绑器)使其在浏览器中工作,并将整个依赖关系图捆绑到单个脚本中。因此,如果代码用于浏览器,您可能会想要捆绑它。如果是用于 Node,则可能不需要。

导入/导出功能

不是函数,是声明。

如果我只是简单地使用这些来捆绑我的模块,那么 ES6 何时可以为我做到这一点?

我想知道是否也可以使用 ES6 语法来捆绑文件。

我是否可以假设原生 ES6 导入/导出功能根本不捆绑文件?

是的。没有原生的方法来捆绑 ES6 模块。您可以将 ES6 模块语法转换为 Node 模块之类的内容并将其捆绑在一起。

从我到目前为止所读到的内容来看,我认为您仍然需要包含所有单独的 Javascript 文件,但您只需使用本机导入功能将模块导入到彼此的命名空间中?

重要的是要认识到,虽然语法是标准化的,但很多行为却不是标准化的。有一个正在开发的加载器规范来指定如何实际定位和加载模块。

另请参阅/sf/answers/2313085981/