Eu vejo pessoas usando gulp com webpack. Mas então eu li webpack pode substituir gulp? Estou completamente confuso aqui ... alguém pode explicar?
ATUALIZAR
no final, comecei com gole. Eu era novo no front-end moderno e só queria começar a trabalhar rapidamente. Agora que estou com os pés bastante molhados depois de mais de um ano, estou pronto para mudar para o webpack. Sugiro o mesmo caminho para pessoas que começam com os mesmos sapatos. Não estou dizendo que você não pode tentar o webpack, mas apenas dizendo se parece complicado começar com o gole primeiro ... nada de errado nisso.
Se você não quer gulp, sim, há um grunhido, mas você também pode especificar comandos no seu package.json e chamá-los na linha de comando sem um executor de tarefas, apenas para começar a funcionar inicialmente. Por exemplo:
"scripts": {
"babel": "babel src -d build",
"browserify": "browserify build/client/app.js -o dist/client/scripts/app.bundle.js",
"build": "npm run clean && npm run babel && npm run prepare && npm run browserify",
"clean": "rm -rf build && rm -rf dist",
"copy:server": "cp build/server.js dist/server.js",
"copy:index": "cp src/client/index.html dist/client/index.html",
"copy": "npm run copy:server && npm run copy:index",
"prepare": "mkdir -p dist/client/scripts/ && npm run copy",
"start": "node dist/server"
},
Respostas:
Esta resposta pode ajudar. Executores de tarefas (Gulp, Grunt, etc) e Empacotadores (Webpack, Browserify). Por que usar juntos?
... e aqui está um exemplo de uso do webpack a partir de uma tarefa gulp. Isso vai um passo além e assume que sua configuração do webpack está escrita em es6.
Acho que você descobrirá que, à medida que seu aplicativo se torna mais complicado, convém usar o gulp com uma tarefa de webpack, como no exemplo acima. Isso permite que você faça mais algumas coisas interessantes em sua compilação que os carregadores e plugins da Webpack realmente não fazem, ou seja. criando diretórios de saída, iniciando servidores etc. Bem, para ser sucinto, o webpack pode realmente fazer essas coisas, mas você pode encontrá-las limitadas para suas necessidades de longo prazo. Uma das maiores vantagens que você obtém do gulp -> webpack é que você pode personalizar sua configuração do webpack para diferentes ambientes e fazer com que o gulp faça a tarefa certa na hora certa. Depende de você, mas não há nada de errado em executar o webpack a partir do gulp, na verdade existem alguns exemplos bem interessantes de como fazê-lo. .
fonte
Os scripts do NPM podem fazer o mesmo que o gulp, mas com cerca de 50x menos código. De fato, sem nenhum código, apenas argumentos de linha de comando.
Por exemplo, o caso de uso que você descreveu onde deseja ter código diferente para diferentes ambientes.
Com os scripts Webpack + NPM, é fácil:
Agora você simplesmente mantém dois scripts de configuração do webpack, um para o modo de desenvolvimento
webpack.development.js
e outro para o modo de produçãowebpack.production.js
. Também utilizo umwebpack.common.js
que hospeda a configuração do webpack compartilhada em todos os ambientes e uso o webpackMerge para mesclá-los.Devido à frescura dos scripts do NPM, ele permite um encadeamento fácil, semelhante ao modo como o Gulp faz o Streams / pipes.
No exemplo acima, para construir para o desenvolvimento, basta acessar a linha de comando e executar
npm run build:dev
.prebuild:dev
,build:dev
,postbuild:dev
.Os prefixos
pre
epost
informam ao NPM em que ordem executar.Se você observar, com os scripts Webpack + NPM, é possível executar programas nativos, como
rimraf
, em vez de um gulp-wrapper para um programa nativo, comogulp-rimraf
. Você também pode executar arquivos .exe nativos do Windows, como eu fiz aqui comelevate.exe
ou arquivos * nix nativos no Linux ou Mac.Tente fazer a mesma coisa com gole. Você terá que esperar alguém aparecer e escrever um gulp-wrapper para o programa nativo que você deseja usar. Além disso, você provavelmente precisará escrever um código complicado como este: (extraído diretamente do repositório angular2-seed )
Código de desenvolvimento Gulp
Código de produção de gole
O código gulp atual é muito mais complicado que isso, pois esse é apenas dois dos vários arquivos gulp presentes no repositório.
Então, qual é mais fácil para você?
Na minha opinião, os scripts do NPM superam em muito o gulp e o grunhido, tanto em eficácia quanto em facilidade de uso, e todos os desenvolvedores de front-end devem considerar usá-lo em seu fluxo de trabalho, pois economiza muito tempo.
ATUALIZAR
Há um cenário que encontrei em que queria usar o Gulp em combinação com scripts NPM e Webpack.
Quando preciso fazer depuração remota em um dispositivo iPad ou Android, por exemplo, preciso iniciar servidores extras. No passado, eu executei todos os servidores como processos separados, no IntelliJ IDEA (ou Webstorm), que é fácil com a Configuração de Execução "Composta". Mas, se eu precisar parar e reiniciá-los, seria entediante fechar cinco guias de servidor diferentes, além de a saída estar espalhada pelas diferentes janelas.
Um dos benefícios do gulp é que é possível encadear toda a saída de processos independentes separados em uma janela do console, que se torna o pai de todos os servidores filhos.
Então, criei uma tarefa gulp muito simples que apenas executa meus scripts do NPM ou os comandos diretamente, para que toda a saída apareça em uma janela e eu possa finalizar facilmente todos os 5 servidores de uma só vez, fechando a janela da tarefa gulp.
Gulp.js
Ainda é um pouco de código apenas para executar 5 tarefas, na minha opinião, mas funciona para esse fim. Uma ressalva é que
gulp-shell
parece não executar alguns comandos corretamente, comoios-webkit-debug-proxy
. Então eu tive que criar um script NPM que apenas execute o mesmo comando e funcione.Portanto, eu uso principalmente scripts NPM para todas as minhas tarefas, mas, ocasionalmente, quando preciso executar vários servidores de uma só vez, inicio minha tarefa Gulp para ajudar. Escolha a ferramenta certa para o trabalho certo.
ATUALIZAÇÃO 2
Agora eu uso um script chamado simultaneamente, que faz a mesma coisa que a tarefa gulp acima. Ele executa vários scripts da CLI em paralelo e canaliza todos eles para a mesma janela do console, e é muito simples de usar. Mais uma vez, nenhum código é necessário (bem, o código está dentro do node_module simultaneamente, mas você não precisa se preocupar com isso)
Isso executa todos os 5 scripts em paralelo canalizados para um terminal. Impressionante! Portanto, neste ponto, raramente uso o gulp, pois existem muitos scripts cli para executar as mesmas tarefas sem código.
Eu sugiro que você leia esses artigos que os comparam em profundidade.
fonte
npm-run-all
há alguns meses, mas nem pensei em usar a-p
bandeira paralela! Vou tentar isso esta semanaEu usei as duas opções em meus projetos diferentes.
Aqui é um clichê que eu coloquei em conjunto, utilizando
gulp
comwebpack
- https://github.com/iroy2000/react-reflux-boilerplate-with-webpack .Eu tenho algum outro projeto usado apenas
webpack
comnpm tasks
.E os dois funcionam totalmente bem. E eu acho que é muito complicado como sua tarefa é e quanto controle você deseja ter em sua configuração.
Por exemplo, se você tarefas é simples, digamos
dev
,build
,test
... etc (que é muito normal), você está totalmente bem com apenas simpleswebpack
comnpm tasks
.Mas se você tiver um fluxo de trabalho muito complicado e quiser ter mais controle de sua configuração (porque está codificando), poderá optar pela rota gulp.
Mas, de acordo com minha experiência, o ecossistema webpack fornece plug-ins e carregadores mais do que suficientes, e por isso adoro usar a abordagem mínima, a menos que haja algo que você possa fazer apenas no gulp. Além disso, facilitará sua configuração se você tiver menos uma coisa no seu sistema.
E muitas vezes, hoje em dia, vejo pessoas substituindo
gulp and browsify
todas juntaswebpack
sozinhas.fonte
Os conceitos de Gulp e Webpack são bem diferentes. Você diz ao Gulp como reunir o código do front-end passo a passo, mas diz ao Webpack o que deseja através de um arquivo de configuração.
Aqui está um pequeno artigo (5 min de leitura) que escrevi explicando minha compreensão das diferenças: https://medium.com/@Maokai/compile-the-front-end-from-gulp-to-webpack-c45671ad87fe
Nossa empresa mudou-se de Gulp para Webpack no ano passado. Embora tenha levado algum tempo, descobrimos como mover tudo o que fizemos no Gulp para o Webpack. Então, para nós, tudo o que fizemos no Gulp também podemos fazer através do Webpack, mas não o contrário.
A partir de hoje, sugiro que você use o Webpack e evite a mistura de Gulp e Webpack para que você e sua equipe não precisem aprender e manter os dois, principalmente porque estão exigindo mentalidades muito diferentes.
fonte
Honestamente, acho que o melhor é usar os dois.
Ainda tenho que encontrar uma solução decente para empacotar css com webpack, e até agora estou feliz em usar gulp para css e webpack para javascript.
Eu também uso
npm
scripts como @Tetradev, conforme descrito. Especialmente desde que eu estou usandoVisual Studio
, e enquantoNPM Task runner
é bastante confiável,Webpack Task Runner
é bastante complicado .fonte