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
});

打包的时候,我把knockoutajaxcookie合并到ko.js去(jquery一般我都合并到require.js去)。
那这时候,登陆页面加载login.js,就会加载它的依赖koajaxcookie,可是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

阅读 5.2k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏