通过使用编译器,已经可以使用ES6模块。最简单的方法之一是使用Browserify和Babelify。我遇到的问题是如何处理依赖关系管理。
在过去,您只会有一些Bower依赖项。该构建会将非CDN捆绑到vendor.js,并将特定于项目的文件捆绑到foobar.js(或其他)。这样,您就可以通过简单地在另一个项目中使用结果代码bower install foobar --save
。如果foobar和您的新项目都具有相同的依赖关系,则可以使用Bowers flat依赖关系轻松解决。
现在出现ES6模块:说我有一个使用lodash的项目foo。目录结构如下:
src/js/foo.js src/vendor/lodash/dist/lodash.min.js
而foo.js通过声明开始:
import * as _ from '../../vendor/lodash/dist/lodash.min.js';
或(自Babelify移植到CommonJS以来,Browserify希望如此):
import * as _ from './../../vendor/lodash/dist/lodash.min.js';
如果现在我汇总并发布我的foo项目并启动一个使用foo的新项目栏,则这将是我的目录结构。
src/js/bar.js src/vendor/foo/dist/foo.js src/vendor/lodash/dist/lodash.min.js
但这是行不通的,因为从foo到lodash的路径现在已断开(如果我正确理解Browserify的话,“ ./ blaat / file.js”中的点斜杠相对于要从其调用的文件)。
是否有某种导入方式而不做任何文件路径假设?
有没有办法指出多个源根?(即在上述情况下src / js和src / vendor ...好吧,理想情况下,您只想声明import * as _ from 'lodash';
)
我只在cli上使用了Browserify和Babelify。我应该使用其他编译器吗?
我认为jspm是您寻找的解决方案。导入模块时,无需进行文件路径假设即可为您提供帮助。它使用SystemJS动态ES6加载程序。观看他们网站上发布的视频,以很好地解释它们的工作原理,Guy Bedford:ES6模块的软件包管理[JSConf2014]。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句