노드 명령 줄 인터페이스를 만들고 있습니다. 전역 적으로 설치되며 실행을 위해 bin 파일을 사용합니다.
작업중인 파일의 루트 디렉터리에서 명령 창을 열고 명령을 실행하려고하지만 process.cwd()
노드 패키지의 디렉터리를 반환하는 현재 작업 디렉터리를 확인할 수 없습니다 . 처음에는 코드가 배치 파일을 래퍼로 사용하여 실행되고 있기 때문에 (즉, 빈 파일이 처음에 노드없이 실행되는 방식) 불가능하지만 coffee-script가이를 수행한다고 가정했습니다. 나는 커피 스크립트 소스를 살펴 봤지만 따라갈 수 없었습니다 (충분히 경험하지 못함).
직접 테스트하려면이 package.json 파일을 사용하여 패키지를 만듭니다.
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
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');
누구든지 이것에 약간의 빛을 비출 수 있습니까?
그런 다음 lib / test 내에서 명령 줄 디렉터리를 가져옵니다.
답변
process.cwd()
응용 프로그램 내부의 ‘process.chdir’에 의해 변경되지 않은 경우 명령이 실행 된 디렉터리 (노드 패키지의 디렉터리가 아님)를 반환합니다.__filename
파일이있는 위치의 절대 경로를 반환합니다.__dirname
디렉토리의 절대 경로를 반환합니다__filename
.
모듈 디렉토리에서 파일을로드해야하는 경우 상대 경로를 사용해야합니다.
require('../lib/test');
대신에
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
항상 호출 한 파일과 관련이 있으며 현재 작업 디렉토리에 의존하지 않습니다.
답변
현재 작업 디렉토리
현재 작업 디렉토리를 얻으려면 다음을 사용할 수 있습니다.
process.cwd()
그러나 일부 스크립트, 특히 gulp는 현재 작업 디렉토리를 process.chdir()
.
노드 모듈 경로
다음을 사용하여 현재 모듈의 경로를 가져올 수 있습니다.
__filename
__dirname
원래 디렉토리 (명령이 시작된 위치)
명령 줄에서 스크립트를 실행 중이고 스크립트가 현재 작동중인 디렉토리에 관계없이 스크립트가 실행 된 원래 디렉토리를 원하는 경우 다음을 사용할 수 있습니다.
process.env.INIT_CWD
NPM 스크립트 작업시 원본 디렉토리
프로젝트의 루트가 아닌 현재 디렉토리에서 NPM 스크립트를 실행하는 것이 바람직한 경우가 있습니다.
이 변수는 npm 패키지 스크립트 내에서 다음과 같이 사용할 수 있습니다.
$INIT_CWD.
최신 버전의 NPM을 실행하고 있어야합니다. 이 변수를 사용할 수없는 경우 NPM이 최신 상태인지 확인하십시오.
이렇게하면 package.json의 현재 경로에 액세스 할 수 있습니다. 예 :
scripts: {
"customScript": "gulp customScript --path $INIT_CWD"
}
답변
또는 현재 NodeJS 스크립트의 현재 디렉토리 만 얻으려면 다음과 같이 간단한 방법을 시도해 볼 수 있습니다. 이것은 Node CLI 자체에서는 작동하지 않습니다.
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);
답변
path.resolve('.')
거의 항상 require('path')
. 호출 된 디렉토리의 절대 경로를 제공합니다.
답변
나를 위해 일한 것은 다음과 같습니다.
console.log(process.mainModule.filename);