Si usas Swift para crear pequeñas utilidades de línea de comandos, es probable que te hayas cansado de tener que recompilar y mover el binario a tu $PATH después de cada cambio.
Para scripts simples, recompilar continuamente rompe bastante el flujo de iteración.
Una forma habitual de evitar compilar es ejecutar directamente el script con el intérprete de Swift, por ejemplo, para una utilidad greetings:
Puedes ejecutarla sin build step directamente:
O crear un alias/manual wrapper:
~/.zshrc or ~/.bashrc
greeting() { }
Aunque esto funciona, tiene es algunas limitaciones:
Añadimos peso al
.zshrc,Introducimos aliases a mantener manualmente
No escala bien si tienes varias utilidades, etc...
Al ser un alias no está disponible para procesos que no sean lanzados fuera del shell (desde otro lenguaje de programación, por ejemplo)
Using npm as a lightweight package manager
Una alternativa más cómoda es tratar el script como un binario:
npm puede usarse para instalar
scripts Swift (en realidad de cualquier otro lenguaje de programación) como comandos globales.
Este enfoque tiene varias ventajas:
no necesitamos recompilar o crear aliases
no necesitamos mover binarios manualmente
y obtenemos un comando disponible globalmente en tu shell
Para nuestra utilidad greetings, basta con crear una estructura simple:
greeting/ ├── package.json └── main.swift
En donde package.json contiene:
{ }
La clave bin le dice a npm que exponga ese archivo como un ejecutable llamado greeting.
La clave name indica el nombre del paquete, útil si queremos desinstalar posteriormente la utilidad.
Shebangs
El script necesita tener un shebang válido para que el sistema sepa cómo ejecutarlo:
Y permisos de ejecución
Installing globally
Desde la carpeta del proyecto:
npm crea un symlink global hacia el script.
Ahora podemos ejecutarlo como cualquier otro comando:
Output:
Y desinstalamos con: