Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 并行下载脚本依赖项RequireJS 下面,我尝试为所有供应商JS资产(如jQuery和Buffery)提供一个文件,同时在其他模块中加载页面特定代码。_Javascript_Requirejs - Fatal编程技术网

Javascript 并行下载脚本依赖项RequireJS 下面,我尝试为所有供应商JS资产(如jQuery和Buffery)提供一个文件,同时在其他模块中加载页面特定代码。

Javascript 并行下载脚本依赖项RequireJS 下面,我尝试为所有供应商JS资产(如jQuery和Buffery)提供一个文件,同时在其他模块中加载页面特定代码。,javascript,requirejs,Javascript,Requirejs,虽然我可以成功地构建js并将其复制到build文件夹中(使用grunt requirejs Optimizer),但是require.config中的baseUrl现在显然是错误的 baseUrl:'js'指向public/js而不是public/build/js,因此所有路径都不正确 运行Optimizer时,是否有方法动态更新baseUrl?所以它指向public/build/js 这是我的艰巨任务: requirejs: { dist: { options: {

虽然我可以成功地构建js并将其复制到
build
文件夹中(使用grunt requirejs Optimizer),但是
require.config
中的baseUrl现在显然是错误的

baseUrl:'js'
指向
public/js
而不是
public/build/js
,因此所有路径都不正确

运行Optimizer时,是否有方法动态更新
baseUrl
?所以它指向
public/build/js

这是我的艰巨任务:

requirejs: {
    dist: {
        options: {
            baseUrl: '<%=pkg.paths.js%>',
            dir:'project/public/build/js',
            mainConfigFile: '<%=pkg.paths.js%>main.js',
            optimize: 'none',
            removeCombined: true,
            uglify2: {
                no_mangle: true,
                compress: {
                    drop_console: true
                }
            },
            modules: [
                {
                    name: 'vendorCommon'
                },
                {
                    name: 'dashboard',
                    exclude: ['vendorCommon']
                }
            ]
        }
    }
}
需要配置

require.config({

    baseUrl: '/js',

    priority: ['vendorCommon'],

    paths: {
        'vendorCommon':'vendor/vendor-common',
        'jquery':'../bower_components/jquery/dist/jquery.min',
        'foundation':'../bower_components/foundation/js/foundation/foundation',
        'dashboard':'views/dashboard'
    },

    shim: {
        'foundation': ['jquery']
    }

});
我已经使用了优化器的设置来修改优化后的一些模块。如果您的配置包含在优化包中,那么您可以使用
onBuildWrite
对其进行修补:

onBuildWrite: function (moduleName, path, contents) {
    if (moduleName === '<%=pkg.paths.js%>main') {
        return contents.replace("baseUrl: '/js'", "baseUrl: '/build/js'");
    }
    return contents;
}
onBuildWrite:function(模块名、路径、内容){
if(moduleName==='main'){
返回contents.replace(“baseUrl:'/js',“baseUrl:'/build/js'”);
}
返回内容;
}
免责声明:我把这写在我的头上。当心打字错误


另一种可能是在运行时重写
baseUrl
。RequireJS能够将多个配置组合成一个配置。在以后的调用中,新值
baseUrl
将覆盖以前的值。因此,如果您有办法设置应用程序的优化版本(例如,通过服务器提供的不同HTML)来调用
require.config({baseUrl:'/build/js'})
在问题中显示的调用之后,但在需要正确的
baseUrl的任何代码之前,这也可以是一个选项。

我曾考虑为生产创建单独的配置,但对我来说,onBuildWrite是一个更好的解决方案。谢谢
onBuildWrite: function (moduleName, path, contents) {
    if (moduleName === '<%=pkg.paths.js%>main') {
        return contents.replace("baseUrl: '/js'", "baseUrl: '/build/js'");
    }
    return contents;
}