requirejs打包后的疑问
我先贴代码。
login.js
define(['jquery', 'ko', 'ajax', 'cookie'], function ($, ko, ajax) {
//to do
ajax.post({
//to do something
});
});
ko.js
define(['jquery', 'knockout', 'ajax', 'cookie'], function ($, knockout, ajax) {
//to do
});
ajax.js
define(['jquery'], function ($) {
//to do
});
打包的时候,我把knockout
和ajax
和cookie
合并到ko.js
去(jquery
一般我都合并到require.js
去)。
那这时候,登陆页面加载login.js
,就会加载它的依赖ko
和ajax
和cookie
,可是ko
已经包含有ajax
了,login.js
的依赖是可以不写cookie
,但是ajax
是要写的,因为有用到ajax
函数里面的方法。
解决方法除了在login.js
模块里面写var ajax = require('ajax');
代替依赖之外,有其他更好的方法吗?
2015.05.11补充
比如我有一个公共的js(common),几乎每个页面(这页面有上百个)都会用到的:
define(['jquery', 'ko', 'hb', 'lang', 'utils', 'ajax', 'dialog', 'ko-icheck', 'ko-ui/selectmenu'], function ($, ko, handlebars, lang, utils, ajax) {
// to do something
});
打包的时候里面的依赖都合并到common去,变成一个文件,到时候页面js(index.js、login.js、welcome.js、agent.js...)调用common,如果我把common合并到页面js去,那每个页面都包含有common变得很大,而且都需要重新加载,这样并不好,还不如把common作为单独一个合并的js,缓存起来,各个页面都可以调用。
我觉得没必要把公共的合并到页面js去,比如首页,我合并后也就三个文件,main.js(require.js和app.js)、conmon.js(jquery、ko、hb等)和index.js。
可如果首页我还需要使用lang
index.js:
define(['common','lang'],function(common,lang){
//to do
});
那lang也会单独加载,没合并前没问题,只会加载一个lang,合并后也只会加载一个lang,只不过合并后conmon里面有lang了。
而如果我这样写:
define(['common'],function(common){
var lang = require('lang');
});
就没问题,lang不会单独加载,因为common里面有define lang
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这个问题可以查看此处:http://segmentfault.com/q/1010000000460671。
补充:楼主的思路已经偏离了模块化,又一次走上了老路子。我不说啥了。