Javascript 要求.js在多个页面上加载相同的脚本

Javascript 要求.js在多个页面上加载相同的脚本,javascript,requirejs,Javascript,Requirejs,我只是在学习。假设我有以下几页: pageA.html pageB.html 对于页面A,我需要加载以下脚本: 塔可js 汉堡包 对于页面B,我需要加载以下脚本: 塔可js 沙拉 超人 为了使用basic require.js加载实现这一点,我想我应该这样做: <!-- pageA.html contains: <script data-main="/scripts/pageAScripts" src="/scripts/require.js"></script>

我只是在学习。假设我有以下几页:

pageA.html pageB.html 对于页面A,我需要加载以下脚本:

塔可js 汉堡包 对于页面B,我需要加载以下脚本:

塔可js 沙拉 超人 为了使用basic require.js加载实现这一点,我想我应该这样做:

<!-- pageA.html contains:
<script data-main="/scripts/pageAScripts" src="/scripts/require.js"></script>
而且

<!-- pageB.html contains:
<script data-main="/scripts/pageBScripts" src="/scripts/require.js"></script>
现在我有了每个页面的主要入口点。但我担心的是在多个地方使用taco.js。因为当我在构建脚本中使用require.js的优化解决方案时,它会创建包含taco.js的pageAScripts.js、hamburger.js和包含taco.js、sala.js和superman.js的pageBScripts.js

因此,现在通过优化过程为用户加载两次taco.js代码。在我的例子中,taco.js是一个相当大的文件,让用户下载两次数据是不可取的

这里的工作流程我遗漏了什么?我对require.js还是一个新手,所以我确信有一些东西。

您可以将taco.js作为单独的文件加载,并在构建文件中告诉requirejs不要将taco.js作为构建文件的一部分。 在require config中,指定taco.js的路径-

并在pageAScript.js和pageBScript.js中要求taco.js,如下所示-

require(['taco'], function (taco) {
});
在构建文件中,告诉requirejs不要使用empty将taco作为构建文件的一部分:

你可以找到更多关于这个的信息

现在,您可以使用script标记在pageA.html和pageB.html上加载taco.js

<script type="text/javascript" src="path/to/taco/js"></script>

这里,taaco.js将被加载到第一个页面,而第二个页面将从浏览器缓存加载。

您可以使用的示例。使那里的RequireJS构建配置与您的相适应:

{
    baseUrl: '.',
    dir: '../build', // This is where the output will go.
    modules: [
        {
            name: 'scripts/taco'
        },
        {
            name: 'scripts/pageAscripts',
            exclude: ['scripts/taco']
        },
        {
            name: 'scripts/pageBscripts',
            exclude: ['scripts/taco']
        }
    ]
}

这是对多页项目示例提供的内容的最小修改。在构建结束时,您将有3个捆绑包:只包含A页代码的build/scripts/pageAscripts,只包含B页代码的build/scripts/pageBscripts,和build/scripts/taco,其中只包含taco模块及其所有依赖项。

因此,在开发过程中,我只加载pageAscripts和pageBscripts,但在构建过程中,我需要添加taco.js,以便在html页面上自行加载,因为它不在构建中?有没有一种自动化的方法可以做到这一点?塔可是构建的一部分。它是设置模块的列表中的第一个模块。根据我在问题中看到的情况,我希望在开发和部署之间唯一需要改变的是页面将从何处加载文件。在开发时,您希望加载未优化的文件。在部署时,您希望加载优化的文件。如果您开始遇到在部署时需要与开发期间不同设置的特殊情况,RequireJS不提供对此的支持。如果存在taco和pageAscripts都使用的依赖项,会发生什么情况?这种依赖性最终会被编译到两个文件中吗?另外,我如何将jQuery集成到这个系统中?如果所有页面都使用jQuery,jQuery是否是另一个需要自己加载的模块,比如taco.js?我是否必须在构建过程中手动将标记添加到html文件中?或者require.js在编译时会自动执行此操作吗?而这会在浏览器处理.ohh。。我认为taco.js不是一个必需的模块。对不起,是我的错。
require(['taco'], function (taco) {
});
({
   baseUrl: ".",
   name: "page(A/B)Script",
   out: "page(A/B)Script.js",
   paths: {
     taco: "empty:"
   }
})  
<script type="text/javascript" src="path/to/taco/js"></script>
{
    baseUrl: '.',
    dir: '../build', // This is where the output will go.
    modules: [
        {
            name: 'scripts/taco'
        },
        {
            name: 'scripts/pageAscripts',
            exclude: ['scripts/taco']
        },
        {
            name: 'scripts/pageBscripts',
            exclude: ['scripts/taco']
        }
    ]
}