Para o código do lado do cliente , você está fazendo a coisa certa. babelify
e envie para o cliente.
Para o código do lado do servidor , eu faria apenas uma compilação regular usando babel-cli
De acordo com http://babeljs.io/docs/setup/#babel_register , babel-register
é não significava para uso em produção - O necessitam de gancho é recomendado principalmente para casos simples.
para Babel 6+
A partir do Babel 6, nenhuma transformação é incluída por padrão. Portanto, vamos começar instalando babel-cli
e babel-preset-es2015
.
$ npm install --save-dev babel-cli babel-preset-es2015
Adicione uma transformação ao seu .babelrc
arquivo - este é o módulo perst que baixamos acima. Dê uma olhada na lista completa de predefinições para ver quais são mais adequadas para você.
{
"presets": ["es2015"]
}
Adicione um build
script ao seu package.json
. Abaixo src
estão seus arquivos de entrada e build
os arquivos de saída transformados
"scripts": {
"build": "babel src -d build"
}
Então construa!
$ npm run build
Em seguida, execute seu código. Neste ponto, você deseja executar os arquivos em seu build
diretório
$ npm start
para Babel <= 5, basta usar o gancho require.
require("babel/register");
Todos os arquivos subsequentes exigidos pelo nó com as extensões .es6 , .es , .jsx e .js serão transformados pelo Babel. O polyfill também é necessário automaticamente.
Você será capaz de manter seus arquivos de origem no ES6, mas ainda executá-los usando node server.js
De acordo com seus comentários, você parece estar tendo alguns problemas. Preste atenção especial à parte destacada em amarelo acima. Seu primeiro arquivo só pode ser ES5, que é executado pelo próprio nó. Todos os requisitos subsequentes serão transformados por Babel ...
Esta é a aparência de uma configuração típica
server.js
require("babel/register");
var app = require("./app.js");
app.js
Queime isso!
$ node server.js
require("babel/register");
meu server.js e quando eu executonode server.js
obtenho o erro:Unexpected reserved word: import ...
então não pareceu funcionarAcabei de escrever uma postagem no blog sobre este tópico
A documentação da CLI do Babeljs avisa o seguinte:
Este é um exemplo de como você pode configurar os scripts npm para executar seu aplicativo com node em vez de babel-node.
"scripts": { "clean": "rm -rf build && mkdir build", "build-css": "node-sass scss/app.scss public/css/app.css", "build-server": "babel -d ./build ./server -s", "build": "npm run clean && npm run build-css && npm run build-server", "lint": "eslint source/ --quiet", "start": "node ./build/index.js", "debug": "node --debug ./build/index.js", "test": "for i in $(ls tests/); do babel-node \"./tests/${i}\" | faucet ; done", "validate": "npm run lint; npm run test && npm outdated --depth 0" },
Você pode encontrar mais detalhes na postagem do blog
fonte
É importante pesar os prós e os contras do uso do babel-node na produção.
babel-node
adiciona entre meio segundo a um segundo ao custo inicial, em hardware comum. Mas se o seu aplicativo for um servidor de longa duração, esse custo de inicialização não terá muita importância.Por outro lado,
src
/lib
e separadosdist
import
de arquivos locais, vai importar desrc/myutils
ou delib/myutils
? O usobabel-node
elimina esse problema.Eu só uso o Babel para suporte a módulos. Agora o V8 acaba de lançar suporte para módulos em 10 de janeiro de 2017. Esperançosamente, veremos suporte a módulos no Node sob uma bandeira em alguns meses, tornando minha razão para usar o Babel discutível.
fonte
A resposta de @cuadraman é mais precisa do que @naomik.
Para responder brevemente à sua pergunta: não,
babel-node
não deve ser invocado explicitamente por você.babel-node
é uma biblioteca privada que é consumida porbabel-cli
.O tutorial oficial tem tudo que você precisa para começar a funcionar no node (não no lado do navegador!): Https://github.com/babel/example-node-server . LEIA-O! Encontrei muitos tutoriais de blog enganosos que costumavam ser redondos e achei este artigo o mais fácil de seguir.
Bônus: ao contrário do que muitas pessoas pensam, toda a magia transpiladora pode ser instalada localmente (usando
npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2
). Não há necessidade de instalar o Babel ou qualquer um de seus módulos auxiliares globalmente! Muito bacana.fonte