创建一个可重用的RequireJs库
Creating a reusable RequireJs library
给定以下简化场景,我如何最好地构建我的可重用组件,以便它可以被另一个应用程序正确地使用,例如foo.js打印23?
可重复使用组件:
/home.js
/main.js
/stuff
foo.js
--
/home.js:
define([], function () { return 23; }
/stuff/foo.js:
define(['home'], function (home) { console.log(home); } // prints 23
消费者应用程序:
/app.js
/main.js
/home.js
/views
template.html
/bower_components
/myReusableComponent
/home.js
/main.js
/stuff
foo.js
--
/home.js:
define([], function () { return 17; }
/bower_components/myReusableComponent/home.js:
define([], function () { return 23; }
/bower_components/myReusableComponent/stuff/foo.js:
define(['home'], function (home) { console.log(home); } // now prints 17
是否存在将/myReusableComponent中任何模块的baseUrl设置为"/myReisableComponent"的使用者应用程序requirejs配置?无论如何,我的可重用组件都不应该/需要访问使用者应用程序的根级别。
我已经研究过r.js优化器,但它只是输出一堆define('stuff/foo', [], function ())
。。。如果使用者应用程序也有stuff/foo.js,会发生什么?
到目前为止,我找到的唯一解决方案是在我的所有模块中强制使用相对路径:define(['../home'], function (home) { console.log(home); }
,但我希望有一种更优雅的方法来解决这个问题。
非常感谢所有反馈!
如果你想生成一个可在不同应用程序中使用的库,那么当库的一个模块引用另一个模块时,你应该使用相对路径,因为这使得使用你的库的人更有可能做到这一点,而不必修改他们的RequireJS配置。
通过明智地使用map
或paths
可以消除一些冲突。然而,最终,如果没有对未优化模块的访问权限,有些情况是无法解决的(或者至少不能按照用户的意愿解决),因此您应该将库作为优化的捆绑包分发,提供将其作为未优化模块集合加载的可能性。
相关文章:
- 创建一个可重用的RequireJs库
- 如何使用“RequireJS”中的“杏仁”生成一个文件
- RequireJS和一个多语言网站
- 无法调用requirejs中的另一个模块
- 使用requirejs加载一个包含多个类的文件(grunt-concat)
- Requirejs+Backbone.js:类型错误:Can't在路由器中传递-路由器不是一个函数
- 尝试将highlight.js集成到一个使用requirejs的angular应用程序中
- RequireJS路径中具有一个标识符的多个文件
- 我可以将RequireJs模块和require.js本身组合成一个js包吗
- 构建一个使用 requirejs 的消费库
- 在TypeScript中放置一个RequireJS定义以从javascript调用
- 为什么串联的 RequireJS AMD 模块需要一个加载器
- requireJS Object 原型可能只是一个 Object 或 null - jQuery
- 重新定义一个RequireJS模块 - 这是可能的吗
- RequireJS:在另一个“require”的回调中使用“require”不会从CDN加载
- 如何使用 RequireJS 构建多个模块,使用一个带有覆盖的物理配置文件
- RequireJS - 先初始化一个依赖模块,然后再加载其他模块
- requireJS包含返回另一个类似模块中的对象的模块
- 一个requirejs.config文件用于多个项目
- requirejs,一个文件中的两个类