¿Cómo puedo usar Babel para el progtwig CLI?

Estoy intentando escribir algún progtwig CLI en un nodo usando Babel. Había visto una pregunta ¿Cómo uso Babel en un progtwig CLI de un nodo? y allí loganfsmyth dijo:

Lo ideal sería precomstackr antes de distribuir su package.

Bien, ahora estoy usando:

"scripts": { "transpile": "babel cli.js --out-file cli.es5.js", "prepublish": "npm run transpile", } 

Pero, me enfrenté al problema, cuando Babel agrega 'use strict'; línea justo detrás del encabezado del #!/usr/bin/env node . Por ejemplo, si tengo cli.js :

 #!/usr/bin/env node import pkg from './package' console.log(pkg.version); 

Conseguiré esto:

 #!/usr/bin/env node'use strict'; var _package = require('./package'); … … … 

Y esto no funciona Cuando bash ejecutarlo, siempre obtengo:

 /usr/bin/env: node'use strict';: This file or directory does'nt exist 

¿Cómo puedo resolver este problema?

La solución de @DanPrince es perfectamente aceptable, pero hay una alternativa

cli.js

mantener este file es5

 #!/usr/bin/env node require("./run.es5.js"); 

run.js

 // Put the contents of your existing cli.js file here, // but this time *without* the shebang // ... 

Actualiza tus scripts a

 "scripts": { "transpile": "babel run.js > run.es5.js", "prepublish": "npm run transpile", } 

La idea aquí es que el cli.js shim no necesita ser trasladado para que pueda mantener su shebang en ese file.

cli.js solo cargará run.es5.js que es la versión babel transstackda de run.js

Podría usar otro script de NPM para agregar el shebang como la última parte de su process de compilation. No es bonito, pero funciona.

 "scripts": { "transpile": "babel cli.js --out-file es5.js", "shebang": "echo -e '#!/usr/bin/env/node\n' $(cat es5.js) > cli.es5.js", "prepublish": "npm run transpile && npm run shebang", } 

Entonces su cli.js original se convertiría

 import pkg from './package' console.log(pkg.version); 

El file es5.js resultante se convierte

 'use strict'; var _package = require('./package'); 

Y finalmente, cli.es5.js convierte

 #!/usr/bin/env node 'use strict'; var _package = require('./package'); 

Esto podría mejorarse con un script limpio.

 "scripts": { "transpile": "babel cli.js --out-file es5.js", "shebang": "echo -e '#!/usr/bin/env/node\n' $(cat es5.js) > cli.es5.js", "clean": "rm es5.js cli.es5.js", "prepublish": "npm run clean && npm run transpile && npm run shebang", } 

Por supuesto, esto requiere que esté en un sistema con bash (o algún shell alternativo compatible), sin embargo, podría hacerlo multiplataforma reescribiendo los scripts de compilation para usar implementaciones de nodos de estos commands con algo como ShellJS .