Избегать дублирования конфигурации "путей" в главном файле RequireJS и файле сборки r.js?

Вот (часть) структура моей папки:

  • Узел-тест
    • bower_components
    • строить
    • общественности
      • main.js
    • build.js

Запуск оптимизатора с r.js -o build.js и следующая конфигурация работает нормально:

// main.js file
requirejs.config({
    baseUrl: '../bower_components',
    paths: {
        'domready': 'domready/ready',
        'jquery': 'jquery/jquery',
    }
});

requirejs(['domready', 'jquery'], function (domReady, $) {
    domReady(function () {

    });
});

// build.js file
({
    baseUrl: "bower_components",
    name: "./almond/almond",
    include: "./../public/main",
    out: "build/main.js",
    paths: {
        'domready': 'domready/ready',
        'jquery': 'jquery/jquery',
    },
    preserveLicenseComments: false
})

Однако, если я удалю paths конфигурация в build.js это больше не работает:

Отслеживание зависимостей для: ./almond/almond Ошибка: ENOENT, нет такого файла или каталога 'C:\Users\Marco\Documents\Progetti\nodejs-opt\bower_components\domready.js' В дереве модулей: ../public/main

Ошибка: Ошибка: ENOENT, такого файла или каталога нет: C: \ Users \ Marco \ Documents \ Progetti \ nodejs-opt \ bower_components \ domready.js 'В дереве модулей: ../public/main

at Object.fs.openSync (fs.js:427:18)

Я хотел бы быть СУХИМ, избегая добавления зависимости дважды. Это возможно?

1 ответ

Решение

Если вы хотите использовать ту же конфигурацию из кода времени выполнения, чтобы найти расположение своих библиотек, вы можете использовать параметр mainConfigFile:

... если вы предпочитаете, чтобы конфигурация "основного" файла JS читалась для сборки, чтобы вам не приходилось дублировать значения в отдельной конфигурации, задайте для этого свойства расположение этого основного файла JS. Будет использован первый вызов requirejs({}), require({}), requirejs.config({}) или require.config({}), найденный в этом файле.

Что-то вроде этого:

({
    baseUrl: "bower_components",
    mainConfigFile: '/some/path/main.js', // adjust path as needed
    name: "./almond/almond",
    include: "./../public/main",
    out: "build/main.js",
    preserveLicenseComments: false
})
Другие вопросы по тегам