Как пропустить определение, включаемое в конец пакета, при объединении файлов сценариев, отличных от amd, с помощью оптимизатора requirejs r.js?

Я пытаюсь оптимизировать свой проект javascript с помощью оптимизатора r.js от requirejs. Я использую модули amd и non-amd в своем проекте. Будет две среды: одна со средой requirejs, а другая без среды requirejs. Файлы в среде non-requirejs не должны иметь по требованию или определять вызовы. При объединении amd-модулей в комплекты с использованием r.js вполне нормально иметь определенный вызов с именем комплекта в конце файла. Но для среды non-requirejs после оптимизации файлов они также получают определенную вставку в конце файла с именем модуля.

Давайте возьмем у меня четыре файла A и B, которые являются AMD-модулями, а C и D - не AMD.

мой build.js такой

({
    appDir: "../",
    baseUrl: "./",
    dir : "../../../output",
    paths: {
        A : '../somepath/to/A',
        B : '../somepath/to/B'
    },
    modules : [
        {
            name : 'bundle1',
            create : true,
            include : ['A', 'B']
        },
        {
            name : 'bundle2',
            create : true,
            include : ['C', 'D']
        }
    ],
    // removeCombined : true,
    cjsTranslate: false,
    optimizeCss : "none",
    skipModuleInsertion: true,
    optimize: "uglify",
    fileExclusionRegExp: /^(((r|app.build)\.js)|(v0))$/,
    keepBuildDir: false,
    bundlesConfigOutFile: "bundles.js",
    onModuleBundleComplete : function(data) {
        console.log(data)
    }

})

Это выглядит как сборка amd-файла.

define('A', function(){
 //some stuff of A
});
define('B', function(){
 //some stuff of B
});
define('bundle1',function(){});

Связанный не-amd файл выглядит так

//some stuff of C
});
//some stuff of D
define('bundle2',function(){});

Как решить эту ситуацию. Я прошел через документы по оптимизации и example.build.js. все еще не мог понять путь. Я что-то пропустил? Есть ли способ исключить это определение вызова в конце не-amd-модулей. Если да, то как?

1 ответ

Я вижу, что вы использовали опцию skipModuleInsertion, которая, основываясь на документации, должна была вам помочь. Я не уверен, почему это не так.

Другой вариант, который вы можете использовать - после завершения сборки перед записью в файл, вы можете удалить этот конкретный вызов define, используя onBuildWrite.

Другие вопросы по тегам