Объединение просмотренных библиотек

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

angular  --> lib 1 --> lib 2 --> application

Обе библиотеки и приложение являются модулями CommonJS Angular. Я хотел бы связать каждую библиотеку отдельно, чтобы их можно было использовать независимо и / или в приложениях, отличных от CJS. Когда я связываю приложение, я хочу включить все upps (angular, lib1, lib2 и т. Д.) В один vendors.js, а приложение - в bundle.js. Я пытался использовать browserify и browserify-shim для создания пакетов, но я постоянно сталкивался с проблемой, когда библиотеки повторно просматриваются в vendors.js не может найти модули, загруженные в.

Это не похоже на случай необычного использования, но у меня есть куча времени, чтобы найти какое-либо руководство; любой совет был бы золотым. Вот более конкретный пример:

Библиотека ресурсов:

'use strict';

var angular = require('angular'); // Non CJS lib; use browserify-shim
require('angular-resource');      // Non CJS lib; use browserify-shim

module.exports = angular.module('resources-library', ['angular-resource']);

require('./services/anApiConsumerResource');
require('./services/anotherApiConsumerResource');

Библиотека виджетов:

'use strict';

var angular = require('angular'); // Non CJS libs; use browserify-shim
require('resources-library')      // browserified CJS Lib; ??? ??? ???

module.exports = angular.module('widgets-library', ['resources-library']);

require('./directives/someDirectiveThatUsesTheResourceLib');
require('./directives/anotherDirectiveThatUsesTheResourceLib');

Образец заявки:

'use strict';

var angular = require('angular'); // Non CJS libs; use browserify-shim
require('resources-library')      // browserified CJS Lib; ??? ??? ???
require('widgets-library')        // browserified CJS Lib that depends on
                                  // another browserified CJS Lib

module.exports = angular.module('the-best-app-in-the-universe', [
    'resources-library',
    'widgets-library']);

require('./directives/someDirectiveThatUsesTheWidgetsLib');
require('./services/aServiceThatConsumesTheResourceLib');

1 ответ

Решение

Обновлено 7/2017 Используйте Gulp-Derequire.

gulp.task('build', function() {
    var bundleStream = browserify({entries: './index.js', standalone: 'yourModule'}).bundle();
    return bundleStream
        .pipe(source('yourModule.js'))
        .pipe(derequire())
        .pipe(gulp.dest('./build'));
});

Спасибо @Michael Heuberger за определение этого решения.

Оригинальный ответ 9/2014

Я считаю, что правильный ответ здесь состоит в том, чтобы не подвергать браузерную проверку распределенных библиотек Мы просто объединяем и минимизируем все библиотеки, включая библиотеки, которые мы создали с помощью browserify, и все начинает хорошо сочетаться.

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