노드 bin 스크립트를 실행할 때 명령 행 작업 디렉토리 결정
노드 명령 행 인터페이스를 작성 중입니다. 전역으로 설치되며 bin 파일을 사용하여 실행합니다.
작업중 인 파일의 루트 디렉토리에서 명령 창을 열어두고 명령을 실행하려고하지만 process.cwd()
노드 패키지의 디렉토리를 반환하는 것처럼 현재 작업 디렉토리를 결정할 수 없었습니다 . 처음에는 배치 파일을 래퍼로 사용하여 코드를 실행하기 때문에 (빈 파일이 처음에 노드없이 실행될 수있는 방법) 불가능하지만 커피 스크립트는 관리 할 수 있다고 가정했습니다. 나는 커피 스크립트 소스를 보았지만 그것을 따를 수 없었습니다 (충분히 경험하지 못했습니다).
직접 테스트하려면이 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 스크립트의 현재 디렉토리 만 얻으려면 다음과 같이 간단한 것을 시도해보십시오. 이것은 노드 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('.')
is also a reliable and clean option, because we almost always require('path')
. It will give you absolute path of the directory from where it is called.
'program tip' 카테고리의 다른 글
쉼표로 할당해도 작동합니까? (0) | 2020.08.05 |
---|---|
Django 템플릿에서 중첩 for 루프로 가장 바깥 쪽 forloop.counter에 액세스하는 방법은 무엇입니까? (0) | 2020.08.05 |
NSURL을 로컬 파일 경로로 변환 (0) | 2020.08.05 |
C #에서 유형을 매개 변수로 전달 (0) | 2020.08.05 |
기능이 여러 조건 인 Numpy (0) | 2020.08.05 |