【问题标题】:Requiring a separate require.js app需要单独的 require.js 应用程序
【发布时间】:2023-03-15 12:50:01
【问题描述】:

我有两个 require.js 应用程序。第二个使用第一个作为依赖项。看起来是这样的:

在 app1/main.js 中

requirejs.config( {
    baseUrl : 'js', // baseUrl relative to app1 folder
    paths: {
        // paths used for app1
    }
});
requirejs(['module'], function (module)  {
    return module;
});

这个文件需要完全“独立”并且有自己的 require 配置,这样它才能加载它的模块和库。

那么, 在 app2/main.js 中

requirejs.config( {
    baseUrl : 'js', // baseUrl relative to app2 folder
    paths: {
        'app1' : '../app1/main' // Using the other app
    }
});
requirejs(['app1', 'module'], function (app1, module)  {
    console.log(app1, module); // The first one should be app1/module.js, the second app2/module.js
});

第二个文件需要有它的配置,但还需要加载 app1/main.js 作为依赖项,就像它是一个普通的模块一样。

但是这两个 requirejs.config 只是混合在一起,如果我在第一个中需要一个文件,它会使用第二个的 baseUrl,或者其他类似的问题。

所以:

  • 如何将 require.js 应用程序转换为可加载的模块并保留其自己的配置?
  • 是否可以在不构建之前做到这一点? (我需要同时处理这两个问题,而且我不希望每次更改某些内容时都必须等待构建)
  • 我阅读了关于命名空间的信息,这可能是一种解决方案,但没有看到任何关于如何在这些情况下使用它们的信息 - 如果我必须在文件开头手动添加它们,这对我来说不是问题。

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    据我了解,您指的是您的第二个应用的配置。我相信,你应该把你的 configuration 和这个 app1module 模块分开。然后,您将能够要求您的 app1module 没有 configuration 部分。

    换句话说:

    app1/main.js

    requirejs.config( {
        baseUrl : 'js', // baseUrl relative to app1 folder
        paths: {
            // paths used for app1
        }
    });
    

    app1/module1

    requirejs(['module'], function (module)  {
        return module;
    });
    

    您来自 app1index.html 然后将更新为:

    来自这样的事情:

    <script type="text/javascript" data-main="js/main" src="js/libs/require.js"></script>
    

    到:

    <script type="text/javascript" data-main="js/main" src="js/libs/require.js"></script>
    <script>
        require(['module1']);
    </script>
    

    那么你就可以在你的第二个应用中轻松使用 app1/module 了。

    我用这个例子更新了我的demo repository。看看吧。

    【讨论】:

    • 我的解释中可能没有提供足够的细节。模块文件只是一个示例,但可能有任何类型的文件。关键问题是 app1/main.js 文件中发生的所有事情都必须使用它自己的 require 配置,因此它可以在其文件夹中 require 文件,而 app2/main.js 可能使用与其文件夹完全不同的配置,但也能够加载 app1/main.js 文件。在您的文件中,只有一个配置文件将被两个模块使用
    • @Malharhak 是的,我理解你。您需要做的就是在您的第一个模块中分离关注点,即当您需要它时,不需要它的配置(这就是我所描述的)。那么app/module1 可能只是您的第二个应用程序中的必需项。
    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2013-03-05
    相关资源
    最近更新 更多