【问题标题】:requirejs, is it possible to create a shim that loads deps after pathrequirejs,是否可以创建一个在路径后加载 deps 的垫片
【发布时间】:2014-08-18 20:17:07
【问题描述】:

这是我想要达到的目标。

我有一个主库需要加载,其他几个库需要在主库之后加载。

所有二级库都需要加载主库。

有类似 shim deps 的反面吗?

primarylib.js 二级lib1.js 二级lib2.js 二级lib3.js 二级lib4.js 二级lib5.js ....

我想这样称呼:

require(['primarylib'], function(){

})

应该先加载primarylib.js,然后再加载所有的二级库。

如果我使用普通 shim 方法,我需要将每个辅助库设置为需要主库。 当我想调用库时,我需要在我的 require() 调用中调用所有辅助库,而不是我想不惜一切代价避免的单个库。


编辑:一些额外的 cmets 和上下文


我正在尝试实现 blueimp 的文件上传器。

它正在为加载图像依赖而哭泣。

加载图像文件的最终配置如下所示。

        "load-image": {
            "path": "lib\/blueimp-load-image\/load-image"
        },
        "load-image-exif-map": {
            "path": "lib\/blueimp-load-image\/load-image-exif-map",
            "shim": {
                "deps": [
                    "load-image"
                ]
            }
        },
        "load-image-exif": {
            "path": "lib\/blueimp-load-image\/load-image-exif",
            "shim": {
                "deps": [
                    "load-image"
                ]
            }
        },
        "load-image-ios": {
            "path": "lib\/blueimp-load-image\/load-image-ios",
            "shim": {
                "deps": [
                    "load-image"
                ]
            }
        },
        "load-image-meta": {
            "path": "lib\/blueimp-load-image\/load-image-meta",
            "shim": {
                "deps": [
                    "load-image"
                ]
            }
        },
        "load-image-orientation": {
            "path": "lib\/blueimp-load-image\/load-image-orientation",
            "shim": {
                "deps": [
                    "load-image"
                ]
            }
        }

如果有这样的工作会很棒:

        "load-image": {
            "path": "lib\/blueimp-load-image\/load-image",
            "shim": {
                "post-deps": [
                    "lib\/blueimp-load-image\/load-image-exif-map",
                    "lib\/blueimp-load-image\/load-image-exif",
                    "lib\/blueimp-load-image\/load-image-ios",
                    "lib\/blueimp-load-image\/load-image-meta",
                    "lib\/blueimp-load-image\/load-image-orientation"
                ]
            }
        }

看看需要做多少额外的配置才能完成这项工作。

为什么不能只需要像 post-deps 键这样的东西来加载帖子路径依赖项?

我遇到了几个库,导致需要以这种方式加载不必要地膨胀我的配置文件。

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    当我想调用库时,我需要在我的 require() 调用中调用所有辅助库,而不是我想不惜一切代价避免的单个库。

    有点像 require 这样的库的意义,它迫使你定义脚本的所有依赖项有几个原因

    • 确保 lib 在被依赖模块使用之前加载
    • 提供对特定模块需要工作的库的可见性

    如果我正确理解你的问题,你不喜欢不得不做的想法

    require(['secondarylib1', 'secondarylib2', 'secondarylib3', ...], function(...) {
        ...
    });
    

    每当您想加载所有库时。假设每个secondarylib 都需要primarylib,那么避免这种情况的最简单方法是拥有一个“bootstrapper” 库来为您加载所有依赖库,例如

    Bootstrapper.js

    require(['secondarylib1', 'secondarylib2', 'secondarylib3', ...], function() {});
    

    Main.js

    require(['bootstrapper'], function() {
        // all libs would be loaded
        ...
    });
    

    【讨论】:

    • 我得出了类似的结论并创建了一个引导程序。感觉就像创建了很多不必要的配置变量,从而扩大了我的配置文件的大小。
    • @DieterGribnitz 这就是使用 require 的美妙之处……你可以模块化你的配置文件!
    • 谢谢,没想到,会考虑模块化配置文件
    猜你喜欢
    • 2013-11-28
    • 2015-02-04
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多