requirejs打包后的疑问

发布于 2022-09-01 07:05:33 字数 1922 浏览 15 评论 0

我先贴代码。
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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜心小果奶 2022-09-08 07:05:33

这个问题可以查看此处:http://segmentfault.com/q/1010000000460671

补充:楼主的思路已经偏离了模块化,又一次走上了老路子。我不说啥了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文