Digamos, por exemplo, que você esteja construindo um projeto no Backbone ou qualquer outra coisa e precise carregar scripts em uma determinada ordem, por exemplo, underscore.js
precisa ser carregado antesbackbone.js
.
Como faço para concatenar os scripts para que eles estejam em ordem?
// 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/'));
});
Eu tenho a ordem correta dos scripts no meu source/index.html
arquivo, mas como os arquivos são organizados por ordem alfabética, o gulp concatena underscore.js
depois backbone.js
, e a ordem dos scripts no meu source/index.html
não importa, ele examina os arquivos no diretório
Então, alguém tem uma idéia sobre isso?
Melhor ideia que eu tenho é renomear os scripts de fornecedores com 1
, 2
, 3
para lhes dar a ordem correta, mas não tenho certeza se eu assim.
À medida que aprendi mais, descobri que o Browserify é uma ótima solução, pode ser uma dor no começo, mas é ótimo.
fonte
require
no front-end, porque é claro que se você usou o npm no servidor, você vê como pode exigir módulos, mas o browserify permite fazer isso no código do cliente, mantenha em mente, para começar, é necessário um pouco de ajustes, mas está principalmente dentro do package.json e se você deseja usar com o gulp.js ou o grunt.js. Se você instalar o pacote gulp / grunt browserify, poderá executargulp/grunt browserify
e transformar seu script em um script principal, é uma pequena curva de aprendizado, mas vale a pena IMO.browserify
deAngular
módulos, onde obras de concatenação simples e ordem não importa :)Respostas:
Recentemente, tive um problema semelhante com o Grunt ao criar meu aplicativo AngularJS. Aqui está uma pergunta que eu postei.
O que acabei fazendo é listar explicitamente os arquivos em ordem na configuração do grunhido. O arquivo de configuração ficará assim:
Grunt é capaz de descobrir quais arquivos são duplicados e não os inclui. A mesma técnica também funcionará com Gulp.
fonte
Outra coisa que ajuda se você precisar que alguns arquivos cheguem após um blob de arquivos é excluir arquivos específicos do seu globo, como:
Você pode combinar isso com a especificação de arquivos que precisam vir primeiro, como explicado na resposta de Chad Johnson.
fonte
src
e, na minhabuild
, vi você usando essa sintaxe, acabei apagando essa parte porque não sabia exatamente por que precisava dela, agora faz sentido.['./source/js/*.js', './source/js/**/underscore.js', './source/js/**/!(underscore)*.js']
!(foobar)
) se você incluiu um arquivo específico anteriormente.['src/app/**/!(*-)*.js', 'src/app/**/*.js']
Eu usei o plug-in gulp-order, mas nem sempre é bem-sucedido, como você pode ver pelo meu módulo de nó de gulp-order overflow de estouro de pilha com fluxos mesclados . Ao navegar pelos documentos do Gulp, deparei-me com o módulo streamque, que funcionou muito bem para especificar a ordem da concatenação do meu caso.https://github.com/gulpjs/gulp/blob/master/docs/recipes/using-multiple-sources-in-one-task.md
Exemplo de como eu usei está abaixo
fonte
Com o gulp-useref, você pode concatenar todos os scripts declarados no seu arquivo de índice, na ordem em que o declara.
https://www.npmjs.com/package/gulp-useref
E no HTML você deve declarar o nome do arquivo de construção que deseja gerar, assim:
No diretório de construção, você terá a referência a main.min.js, que conterá vendor.js, test.js e main.js
fonte
O fluxo de classificação também pode ser usado para garantir a ordem específica dos arquivos
gulp.src
. Código de exemplo que coloca obackbone.js
sempre como o último arquivo a ser processado:fonte
Acabei de adicionar números ao início do nome do arquivo:
Funciona em gole sem problemas.
fonte
Tenho meus scripts organizados em pastas diferentes para cada pacote que recebo do caramanchão, além de meu próprio script para o meu aplicativo. Como você vai listar a ordem desses scripts em algum lugar, por que não apenas listá-los no seu arquivo gulp? Para novos desenvolvedores do seu projeto, é bom que todos os pontos de extremidade do script estejam listados aqui. Você pode fazer isso com o gulp-add-src :
gulpfile.js
Nota: jQuery e Bootstrap adicionados para fins de demonstração de ordem. Provavelmente é melhor usar CDNs para aqueles, pois eles são tão amplamente usados e os navegadores já podem armazená-los em cache de outros sites.
fonte
Tente stream-series . Funciona como merge-stream / event-stream.merge (), exceto que, em vez de intercalar, ele anexa ao final. Não requer que você especifique o modo de objeto como streamqueue , para que seu código saia mais limpo.
fonte
O merge2 parece a única ferramenta de fusão de fluxo ordenada em funcionamento e mantida no momento.
Atualização 2020
As APIs estão sempre mudando, algumas bibliotecas se tornam inutilizáveis ou contêm vulnerabilidades, ou suas dependências contêm vulnerabilidades, que não são corrigidas por anos. Para manipulações de arquivos de texto, é melhor usar scripts personalizados do NodeJS e bibliotecas populares como
globby
efs-extra
junto com outras bibliotecas sem os invólucros Gulp, Grunt, etc.fonte
Um método alternativo é usar um plug-in Gulp criado especificamente para esse problema. https://www.npmjs.com/package/gulp-ng-module-sort
Ele permite que você classifique seus scripts adicionando um
.pipe(ngModuleSort())
como:Assumindo uma convenção de diretório de:
Espero que isto ajude!
fonte
Para mim, eu tinha natualSort () e angularFileSort () no pipe que estava reordenando os arquivos. Eu o removi e agora funciona bem para mim
fonte
Eu apenas uso gulp-angular-filesort
fonte
Estou em um ambiente de módulo em que todos são dependentes do núcleo usando gulp. Então o
core
módulo precisa ser anexado antes dos outros.O que eu fiz:
src
pastagulp-rename
seucore
diretório para_core
gole está mantendo a ordem do seu
gulp.src
, minha concatsrc
fica assim:Obviamente, será
_
o primeiro diretório da lista (classificação natural?).Nota (angularjs): Eu uso o gulp-angular-extender para adicionar dinamicamente os módulos ao
core
módulo. Compilado, fica assim:Onde Admin e Produtos são dois módulos.
fonte
se você deseja solicitar dependências de bibliotecas de terceiros, tente wiredep . Este pacote basicamente verifica a dependência de cada pacote no bower.json e conecta-os a você.
fonte
Tentei várias soluções nesta página, mas nenhuma funcionou. Eu tinha uma série de arquivos numerados que eu simplesmente queria que fossem ordenados pelo nome da dobra em ordem alfabética
concat()
. Ou seja, preserve a ordem da entrada globbing. Fácil né?Aqui está o meu código de prova de conceito específico (
print
é apenas para ver a ordem impressa no CLI):A razão da loucura de
gulp.src
? Eu determinei quegulp.src
estava executando assíncrono quando consegui usar umasleep()
função (usando um.map
com tempo de espera incrementado pelo índice) para ordenar a saída do fluxo corretamente.O resultado da assíncrona dos
src
diretórios médios com mais arquivos veio depois dos diretórios com menos arquivos, porque eles demoraram mais para serem processados.fonte
Na minha configuração do gulp, estou especificando os arquivos do fornecedor primeiro e depois especificando tudo (mais geral) tudo, segundo. E coloca com êxito o fornecedor js antes dos outros itens personalizados.
fonte
Aparentemente, você pode passar a opção "nosort" para gulp.src gulp.src .
fonte