Ecmascript 6 es6模块是否否定了browserify/webpack的需要?
ES6模块允许我们创建可以作为依赖项导出和导入的代码模块Ecmascript 6 es6模块是否否定了browserify/webpack的需要?,ecmascript-6,browserify,webpack,Ecmascript 6,Browserify,Webpack,ES6模块允许我们创建可以作为依赖项导出和导入的代码模块 Browserify和Webpack做同样的事情。那么,如果我使用ES6和babel之类的工具来传输我的代码,那么就不需要webpack和browserify了,这是对的吗?如果您在浏览器中使用它,您当前仍然需要webpack或browserify。 让我们看一个例子: 以下 import * as name from 'name.js'; 变成: 'use strict'; function _interopRequireWildc
Browserify和Webpack做同样的事情。那么,如果我使用ES6和babel之类的工具来传输我的代码,那么就不需要webpack和browserify了,这是对的吗?如果您在浏览器中使用它,您当前仍然需要webpack或browserify。 让我们看一个例子: 以下
import * as name from 'name.js';
变成:
'use strict';
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
var _nameJs = require('name.js'); // Here, a function named "require" is still needed
var name = _interopRequireWildcard(_nameJs);
如您所见,babel依赖于方法require
(实际上是它的任何实现)来进行导入。由于node.js实现了CommonJS,它可以工作,但目前没有浏览器实现它。恐怕两者都没有。如前所述-ES6模块有两个方面:
ES6模块标准包括两部分:
- 声明性语法(用于导入和导出)
- 程序加载器 API:配置模块的加载方式和条件加载 模块
- 使用Babel将ES6模块语法传输到CommonJS/AMD等现有模块实现,然后可以使用Webpack/browserify/requirejs等可用工具加载/绑定js资产李>
- 或者,也有类似的加载程序,它们提供对编程加载程序API的支持(通过使用此工具,您确实可以摆脱Browserify/Webpack,但到目前为止,您只是在用一种工具替换另一种工具。随着越来越多的库(如ES6模块)接受ES6模块,并推荐标准化的
系统。导入
语法-SystemJS将大受欢迎
正如诸如此类工具的作者反复指出的那样,ES6模块的静态分析特性使树抖动和死代码消除更加有效。目前我想说有三点。如果我错了,请纠正我
browserify
与目前最常用的包管理器--npm
集成得更好
节点_modules
中模块的相对路径,而不是像browserify
那样仅指定模块名称。您可以编写预处理器来解决es6modules的此问题,并在构建过程中执行它(如果不是相对路径,则只需更改路径).但这当然是额外的工作,browserify提供了开箱即用的功能
此外,npm注册表中的大多数模块可能使用commonjs语法,而不是es6modules语法。这意味着,如果您想直接从npm使用模块,您必须使用它来利用es6modules的优势
注意:AFAIK将es6modules语法转换为其他语法(如babel)并不能保留es6modules语法的优点
browserify
可以使用非常好的工具,使开发非常方便,以便您能够以有效的方式工作,例如watchify
,由于缓存,它确实显著增加了生成所需的时间ES6模块定义了一个语法。Browserify/Webpack捆绑模块使它们在浏览器(尤其是旧的)中工作。它们一起工作,不能相互替换。这个答案已经过时了。