node.js - servicio - Determinar el directorio de trabajo de la línea de comandos cuando se ejecuta script de bin de nodo
servicio node js (3)
Estoy creando una interfaz de línea de comando de nodo. Está instalado globalmente y utiliza un archivo bin para ejecutarse.
Planeo tener una ventana de comando abierta en el directorio raíz de los archivos en los que estoy trabajando y luego ejecutar el comando. Sin embargo, no he podido determinar el directorio de trabajo actual ya que process.cwd()
está devolviendo el directorio del paquete de nodos. . Inicialmente asumí que dado que el código se está ejecutando utilizando un archivo de proceso por lotes como un contenedor (así es como los archivos bin pueden ejecutarse sin un nodo al principio) entonces es imposible, pero coffee-script logra hacerlo. Eché un vistazo a la fuente del script de café pero no pude seguirla (no tuve la experiencia suficiente).
Para probarlo usted mismo, cree un paquete con este archivo package.json:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
este archivo de paquete de prueba en contenedor:
#!/usr/bin/env node
var path = require(''path'');
var fs = require(''fs'');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), ''../lib'');
require(lib + ''/test'');
¿Alguien podría arrojar algo de luz sobre esto?
y luego intente obtener el directorio de la línea de comando dentro de lib / test.
Directorio de trabajo actual
Para obtener el directorio de trabajo actual, puede usar:
process.cwd()
Sin embargo, tenga en cuenta que algunos scripts, especialmente gulp, cambiarán el directorio de trabajo actual por process.chdir()
.
Ruta del módulo de nodo
Puede obtener la ruta del módulo actual con:
-
__filename
-
__dirname
Directorio original (donde se inició el comando)
Si está ejecutando un script desde la línea de comandos y desea el directorio original desde el que se ejecutó el script, independientemente del directorio en el que el script esté operando actualmente, puede usar:
process.env.INIT_CWD
Directorio original, cuando se trabaja con scripts NPM
A veces es deseable ejecutar un script de NPM en el directorio actual, en lugar de ejecutar la raíz del proyecto.
Esta variable está disponible dentro de los scripts del paquete npm como:
$INIT_CWD.
Debe ejecutar una versión reciente de NPM. Si esta variable no está disponible, asegúrese de que el NPM esté actualizado.
Esto le permitirá acceder a la parth actual en su paquete. Json, por ejemplo:
scripts: {
"customScript": "gulp customScript --path $INIT_CWD"
}
Alternativamente, si desea obtener únicamente el directorio actual de la secuencia de comandos NodeJS actual, puede intentar algo simple como este. Tenga en cuenta que esto no funcionará en la CLI de nodo propiamente dicha:
var fs = require(''fs''),
path = require(''path'');
var dirString = path.dirname(fs.realpathSync(__filename));
// output example: "/Users/jb/workspace/abtest"
console.log(''directory to start walking...'', dirString);
-
process.cwd()
devuelve el directorio donde se ejecutó el comando (no el directorio del paquete de nodos) si ''process.chdir'' no lo ha modificado dentro de la aplicación. -
__filename
devuelve la ruta absoluta al archivo donde se coloca. -
__dirname
devuelve la ruta absoluta al directorio de__filename
.
Si necesita cargar archivos desde su directorio de módulos, necesita usar rutas relativas.
require(''../lib/test'');
en lugar de
var lib = path.join(path.dirname(fs.realpathSync(__filename)), ''../lib'');
require(lib + ''/test'');
Siempre es relativo al archivo desde el que llamó y no depende del directorio de trabajo actual.