请教:如何在无规范的js代码中,引用符合AMD规范的js

安容慕 2015-10-14 01:24:47
假如,我有一个维护很久远的页面:index.html,它里面包含了很多js,是这样的:

<html>
……
<body>
<script src="a.js"></script>
<script src="b.js"></script>
<script src="c.js"></script>
<script>
do();
take();
</script>
<body>
</html>


这些 js 都是在文件里,直接写一个又一个function,没有遵守任何CommonJS,AMD或CMD之类的规范。

问题来了,现在有一个 library.js ,它遵守AMD规范,我又想用它,怎么在现有的 index.html中引用,并在现在的页面里内嵌的js代码do(); 和 take() 之间调用 library.run() 这个函数呢?

library.js定义如下:

define(["jquery"], function($){
return {
run: function() { .... }
};
});
...全文
242 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
街头小贩 2015-10-16
  • 打赏
  • 举报
回复
都不知你在就结什么,你的amd js 是加载后自动运行的?不是自动运行的就有调用入口
安容慕 2015-10-16
  • 打赏
  • 举报
回复
上面一行少了字: 有调用入口,但你在 require([], function(){ }) 的外面能调用吗? 我就想在 require() 函数的外面调用
安容慕 2015-10-16
  • 打赏
  • 举报
回复
引用 6 楼 xiaofanku 的回复:
都不知你在就结什么,你的amd js 是加载后自动运行的?不是自动运行的就有调用入口
感谢回复。 amd js不是加载后自动运行的,但是,如果你想调用,那肯定得等它加载完吧? 只有在 require([], function(){ }) 的回调函数里面,才能确保js加载完吧? 有调用入口,但你在 require([], function(){ }) 能调用吗? 我就想在 require() 函数的外面调用
木头海上漂 2015-10-15
  • 打赏
  • 举报
回复
应该可以直接用得。。只要没啥命名冲突就好了。。。你的amd是一个独立的个体。。。
安容慕 2015-10-15
  • 打赏
  • 举报
回复
引用 4 楼 xiaofanku 的回复:
amd不是解决js的依赖关系吗?要执行什么,何时执行这也归amd管吗
没错,AMD解决依赖,但也是异步加载,据我了解,使用AMD,只能这么加载:

require(["pack1", "pack2", ... "packn"], function(p1, p2, ... pn){
     // 在这个回调函数里,能保证所有的pack都已经按依赖顺序加载好了
});
// 在函数外面,无法保证哪个pack已经加载,所以,在这个位置,没法使用 pack1 ... packn 中的任何一个函数。
而我的使用情况是:就要在这些串行执行的js代码块中,使用AMD的js,晕啦
街头小贩 2015-10-15
  • 打赏
  • 举报
回复
amd不是解决js的依赖关系吗?要执行什么,何时执行这也归amd管吗
安容慕 2015-10-15
  • 打赏
  • 举报
回复
怎么直接用呢?是这样不?

<html>
……
<body>
    <script src="a.js"></script>
    <script src="b.js"></script>
    <script src="c.js"></script>
    <script src="library.js"></script>
    <script>
        do();
        library.run();  
        take();
    </script>
<body>
</html>
这样用,首先会报错,找不到 define, 其次,就算我在最前面引入 "require.min.js",在下面的代码中如何引用呢? require(["library"], function(lib){ lib.run(); // 这样就变成异步的,和外面的 do(), take() 顺序就不能保证串行了。况且,假如,我后面的代码依赖于 lib.run() 这函数,怎么办? });
引用 1 楼 xiaofanku 的回复:
不可以直接写吗?有命名冲突吗
街头小贩 2015-10-14
  • 打赏
  • 举报
回复
不可以直接写吗?有命名冲突吗

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧