Скажем, например, вы строите проект на Backbone или что-то еще, и вам нужно загружать скрипты в определенном порядке, например, underscore.js
нужно загружать раньше backbone.js
.
Как мне заставить его согласовать сценарии, чтобы они были в порядке?
// JS concat, strip debugging and minify
gulp.task('scripts', function() {
gulp.src(['./source/js/*.js', './source/js/**/*.js'])
.pipe(concat('script.js'))
.pipe(stripDebug())
.pipe(uglify())
.pipe(gulp.dest('./build/js/'));
});
У меня есть правильный порядок сценариев в моем source/index.html
, но, поскольку файлы организованы в алфавитном порядке, gulp будет объединяться underscore.js
после backbone.js
, и порядок сценариев в моем source/index.html
не имеет значения, он просматривает файлы в каталоге.
Так у кого-нибудь есть идеи по этому поводу?
Лучшая идея у меня есть переименовывать скрипты поставщика с 1
, 2
, 3
чтобы дать им надлежащий порядок, но я не уверен , если я так.
Когда я узнал больше, я обнаружил, что Browserify - отличное решение, поначалу это может быть больно, но это здорово.
источник
require
интерфейсе, потому что, конечно, если вы использовали npm на стороне сервера, вы увидите, как вам могут потребоваться модули, но browserify позволяет вам делать это в коде на стороне клиента. чтобы начать, нужно немного поработать, но в основном он находится внутри package.json и если вы хотите использовать его с gulp.js или grunt.js. Если вы установите пакет gulp / grunt browserify, вы сможете запустить егоgulp/grunt browserify
и превратить в один основной скрипт, это будет небольшой кривой обучения, но оно того стоит.browserify
дляAngular
модулей, где простые работы конкатенации и порядок не имеет значения :)Ответы:
Недавно у меня была похожая проблема с Grunt при создании моего приложения AngularJS. Вот вопрос, который я отправил.
В итоге я явно перечислил файлы по порядку в конфиге grunt. Файл конфигурации будет выглядеть так:
Grunt может выяснить, какие файлы являются дубликатами, а не включать их. Та же самая техника будет работать и с Gulp.
источник
Еще одна вещь, которая помогает, если вам нужны некоторые файлы после большого количества файлов, - это исключение определенных файлов из вашего глобуса, например, так:
Вы можете объединить это с указанием файлов, которые должны быть на первом месте, как объяснено в ответе Чеда Джонсона.
источник
src
и в мой,build
я видел, как вы использовали этот синтаксис, в итоге я удалил эту часть, потому что я не был точно уверен, зачем мне это нужно, имеет смысл сейчас.['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
!(foobar)
), если вы предварительно включили определенный файл.['src/app/**/!(*-)*.js', 'src/app/**/*.js']
Я использовал плагин gulp-order, но он не всегда успешен, как вы можете видеть из моего модуля переполнения стека после модуля узла gulp-order с объединенными потоками . Просматривая документы Gulp, я наткнулся на модуль streamque, который довольно хорошо работал для определения порядка конкатенации в моем случае.https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
Пример того, как я использовал это ниже
источник
С помощью gulp-useref вы можете объединить каждый скрипт, объявленный в вашем индексном файле, в том порядке, в котором вы его объявили.
https://www.npmjs.com/package/gulp-useref
И в HTML вы должны объявить имя файла сборки, который вы хотите сгенерировать, например так:
В вашем каталоге сборки у вас будет ссылка на main.min.js, который будет содержать vendor.js, test.js и main.js
источник
Поток сортировки также может использоваться для обеспечения определенного порядка файлов с
gulp.src
. Пример кода, который помещаетbackbone.js
всегда как последний файл для обработки:источник
Я просто добавляю цифры в начало имени файла:
Работает глотком без проблем.
источник
У меня есть свои сценарии, организованные в разные папки для каждого пакета, который я извлекаю из bower, плюс мой собственный сценарий для моего приложения. Поскольку вы собираетесь где-то перечислить порядок этих сценариев, почему бы просто не указать их в файле gulp? Для новых разработчиков в вашем проекте хорошо, что все конечные точки вашего скрипта перечислены здесь. Вы можете сделать это с помощью gulp-add-src :
gulpfile.js
Примечание: jQuery и Bootstrap добавлены для демонстрации порядка. Вероятно, лучше использовать CDN для них, поскольку они так широко используются, и браузеры уже могут кэшировать их с других сайтов.
источник
Попробуйте потоковую серию . Он работает как merge-stream / event-stream.merge () за исключением того, что вместо перемежения он добавляется в конец. Вам не нужно указывать режим объекта , такой как streamqueue , поэтому ваш код получается чище.
источник
На данный момент merge2 выглядит как единственный работающий и поддерживаемый инструмент слияния упорядоченных потоков.
Обновление 2020
API постоянно меняются, некоторые библиотеки становятся непригодными или содержат уязвимости, или их зависимости содержат уязвимости, которые не исправляются годами. Для манипуляций с текстовыми файлами лучше использовать пользовательские скрипты NodeJS и популярные библиотеки, такие как
globby
иfs-extra
вместе с другими библиотеками без упаковщиков Gulp, Grunt и т. Д.источник
Альтернативный метод - использовать плагин Gulp, созданный специально для этой проблемы. https://www.npmjs.com/package/gulp-ng-module-sort
Это позволяет вам сортировать ваши сценарии, добавляя в качестве
.pipe(ngModuleSort())
такового:Предполагая, что директория:
Надеюсь это поможет!
источник
Для меня у меня были natualSort () и angularFileSort () в трубе, которая переупорядочивала файлы. Я удалил его, и теперь он отлично работает для меня
источник
Я просто использую gulp-angular-filesort
источник
Я нахожусь в модульной среде, где все являются зависимыми от ядра, использующими gulp. Таким образом,
core
модуль должен быть добавлен перед другими.Что я сделал:
src
папкуgulp-rename
вашcore
каталог_core
глоток следит за твоим порядком
gulp.src
, мой конкатsrc
выглядит так:Очевидно, он будет
_
первым каталогом из списка (естественная сортировка?).Примечание (angularjs): Затем я использую gulp-angular-extender для динамического добавления модулей в
core
модуль. Скомпилировано это выглядит так:Где Admin и Products - это два модуля.
источник
если вы хотите заказать зависимости от сторонних библиотек, попробуйте wiredep . Этот пакет в основном проверяет каждую зависимость пакета в bower.json, а затем соединяет их для вас.
источник
Я пробовал несколько решений с этой страницы, но ни одно не помогло. У меня была серия пронумерованных файлов, которые я просто хотел упорядочить по алфавитному имени, так что, когда я отправил
concat()
они будут в том же порядке. То есть, сохранить порядок ввода ввода. Легко, правда?Вот мой конкретный код для проверки концепции (
print
просто чтобы посмотреть заказ, напечатанный в cli):Причина безумия
gulp.src
? Я определил, чтоgulp.src
работает асинхронно, когда я смог использоватьsleep()
функцию (используя.map
с временем ожидания, увеличенным на индекс), чтобы правильно упорядочить вывод потока.Результатом асинхронности
src
средних папок с большим количеством файлов стал поиск папок с меньшим количеством файлов, потому что для их обработки потребовалось больше времени.источник
В моей настройке gulp я сначала указываю файлы вендора, а затем указываю (более общее) все, во-вторых. И это успешно ставит поставщика JS перед другими пользовательскими вещами.
источник
По-видимому, вы можете передать опцию "nosort" gulp.src gulp.src .
источник