分发带有依赖关系的可重用JavaScript模块的最佳方式是什么?
What is the best way to distribute reusable JavaScript modules with dependencies?
有很多格式化JavaScript模块的方法:AMD, CommonJS, UMD, ES6,全局脚本。我曾见过一些项目以他们想要的任何方式构建源代码,并运行构建过程来生成一个包含上述所有格式代码的dist目录。这样做的好处是,代码的用户可以选择最适用于其环境的格式。
只要模块不依赖于其他模块,这个方法就可以正常工作。在模块必须导入其他模块的情况下,存在隐含的复杂性。例如,RequireJS使用如下的配置文件:
requirejs.config({
paths: {
'jquery': 'js/lib/jquery',
'ember': 'js/lib/ember',
'handlebars': 'js/lib/handlebars',
'underscore': 'js/lib/underscore'
}
});
其他加载器也有相应的机制来映射导入路径。
如果jQuery是一个依赖,模块应该从路径' jQuery '导入它吗?如果系统将jQuery存储在路径"libs/jQuery"中怎么办?在这种情况下,集成jQuery的系统的作者是否有责任在导入路径的配置中提供别名?
这个问题强烈地暗示了一个真正可重用的模块必须提供所有模块格式格式的代码,并且清楚地记录它所依赖的库(及其版本),并记录这些库被假定存在的导入路径。
例如,我可以编写一个花哨的jQuery插件,并在AMD、CommonJS、ES6和全局变体中发布。我会说明这个插件依赖于通过路径"jquery_on_a_path_that_confuses_you"导入的jQuery 2.0版本。这个插件的潜在用户必须将这个插件复制到他的项目中,然后配置他的模块加载器或构建工具,以在路径'jquery_on_a_path_that_confuses_you'下导出jQuery。
就我所知:
- 对于导入路径的使用没有标准。
- 没有标准的方式来表达一段代码的依赖、版本和导入路径要求。
- 没有标准的补救措施来处理导入路径冲突或加载多个版本的库。
您可能需要检查jspm。io + SystemJS,这是一个相对较新的包管理器和通用模块加载器,越来越受欢迎。
请在下面找到一些我认为有用的关于这个主题的演讲和文章:
https://www.youtube.com/watch?v=MXzQP38mdnE https://vimeo.com/65042246 https://www.youtube.com/watch?v=szJjsduHBQQ http://javascriptplayground.com/blog/2014/11/js-modules-jspm-systemjs/回答晚了,但是如果你在编写纯JS代码(没有jQuery或其他框架)之后,我发现有一个deploder . JS repo,你可以使用它将任何类型的JS打包到模块中并进行依赖加载。
值得一看
- Javascript,访问一个主要对象模块模式中的每个对象
- JavaScript命名约定;静态“;类或模块
- Javascript模块系统I'I’我正在努力,但搞不明白
- Can用户'MediaWiki上的自定义JavaScript调用Lua模块
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- Javascript中的模块模式和揭示模块模式是否仅在创建API时有用;s
- 将事件发送到javascript文档的react本机模块是否正确
- 记录javascript模块名称
- 是否可以从javascript文件中将量角器作为模块运行
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 如何在客户端javascript中需要节点模块
- 在我的JavaScript模块中绑定一个点击事件
- 为什么在javascript中的模块模式中实现Lazy函数时范围会发生变化
- 在模块 JavaScript 中创建对象
- Drupal 7 Gmap模块- javascript错误"需要javascript来查看这个地图."
- 如何将我的模块Javascript添加到prestshop中的*所有*页面
- DotNetNuke模块javascript干扰编辑按钮
- 为多模块Javascript网站应用Backbone.js
- 模块Javascript中的常量或最终变量
- asp.net MVC - 敲除 CSS 绑定和揭示模块 JavaScript Patten