javascript - 分发具有依赖项的可重用 JavaScript 模块的最佳方式是什么?

标签 javascript module amd commonjs

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/

关于javascript - 分发具有依赖项的可重用 JavaScript 模块的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25071718/

相关文章:

javascript - 使用ffmpeg javascript从wav音频文件转换为pcm音频文件

javascript - jQuery AJAX 文件上传 PHP

javascript - jQuery fadeIn 实际上并没有淡入

javascript - requirejs:我可以要求一个全局运行时变量吗?

gulp - browserify 管道中的 Emscripten 模块

javascript - Require.js 从错误路径加载依赖项

javascript - 在node.js应用程序中, mdkirSync ('mydir' ,700) 导致权限 d-w------T

react-native - 无法解析模块 'react-redux' ...模块 'react-redux' 在加速模块映射中不存在

laravel - 如何在 laravel 模块中进行迁移?

module - 我不能在同一个文件中拥有所有特征和 impl;如何放在单独的文件中?