Объединение просмотренных библиотек
У меня проблемы с поиском канонического подхода к созданию приложений с каскадными зависимостями браузера. У меня есть диаграмма зависимостей, которая выглядит примерно так:
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, и все начинает хорошо сочетаться.