基于require 写了个js模块,该模块命名为:d,文件名为d.js。例如:
javascriptdefine(['a', 'b', 'c'], function(a, b, c) { var API = { init: function() {} }; return API; });
通常调用方式:
javascriptrequire(['d'], function(d) { d.init(); });
但是,我想让其他项目也调用我的模块,他们并没有使用AMD。我想把d暴露注册到window上。使用的方式为:
1.引入d.js。
2.调用全局公开接口:d.init()
然而这样是不行的,因为依赖是异步载入的。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
根据楼主的描述,我猜测有如下情况
1. 项目中部分代码使用requirejs,d.js是各个模块中的其中一个,那么他的加载时机必然会在script加载方式完成之后,这个时候可以**
如果需要在d.js加载之前调用,那么可以使用简单的依赖注入。
如:
html中的script中
d.js中
2. 使用r.js,或grunt/gulp,把你的工程打包,然后在合并后的文件头部加入requirejs的适配代码,即可使用script的方式引入合并后的d.js。
一般提供给第三方使用的库/模块/框架,都是如此写法。
如:
最简单的
复杂一点的
https://github.com/EggFiredRice/AppProxy.js/blob/master/AppProxy.js
还可以参照
https://github.com/jashkenas/backbone/blob/master/backbone.js
https://github.com/RubyLouvre/avalon/blob/master/dist/avalon.js
等等。。。
楼主自己也说了依赖是异步载入的,这个时候只能去管理这种依赖关系,可以考虑使用类似于lazyLoad.js这种库,或者自己监测依赖的库是否加载完成再执行d.js