Estoy creando una interfaz de línea de comandos de nodo. Se instala 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 simplemente 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 nodo. Inicialmente asumí que, dado que el código se está ejecutando usando un archivo por lotes como contenedor (así es como los archivos bin pueden ejecutarse sin 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 tengo suficiente experiencia).
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 bin:
#!/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 comandos dentro de lib / test.
fuente
process.chdir()
, ¿hay alguna forma de obtener el original?var originalCwd = process.cwd();
luego ejecute suprocess.chdir()
, y luego podrá volver al original).../lib/test
portátil?../lib/test
es portátil, mientras que la contraparte de Windows..\lib\test
no es ...Directorio de trabajo actual
Para obtener el directorio de trabajo actual, puede usar:
Sin embargo, tenga en cuenta que algunos scripts, en particular gulp, cambiarán el directorio de trabajo actual con
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 esté operando actualmente, puede utilizar:
Directorio original, cuando se trabaja con scripts NPM
A veces es deseable ejecutar un script NPM en el directorio actual, en lugar de la raíz del proyecto.
Esta variable está disponible dentro de los scripts del paquete npm como:
Debe ejecutar una versión reciente de NPM. Si esta variable no está disponible, asegúrese de que NPM esté actualizado.
Esto le permitirá acceder a la ruta actual en su package.json, por ejemplo:
fuente
process.env.INIT_CWD
devuelve el directorio depackage.json
Alternativamente, si desea obtener únicamente el directorio actual del script NodeJS actual, puede intentar algo simple como esto. Tenga en cuenta que esto no funcionará en la CLI de nodo en sí:
fuente
path.resolve('.')
También es una opción confiable y limpia, porque casi siemprerequire('path')
. Le dará la ruta absoluta del directorio desde donde se llama.fuente
Esto es lo que funcionó para mí:
fuente