Node.js에서 스크립트 경로를 어떻게 알 수 있습니까?
이 있다는 것을 알고 process.cwd
있지만 스크립트 자체가 아닌 스크립트가 호출 된 디렉토리 만 나타냅니다. 예를 들어 /home/kyle/
내가 다음 명령을 실행 한다고 가정 해보십시오.
node /home/kyle/some/dir/file.js
내가 전화하면 process.cwd()
, 내가 얻을 /home/kyle/
하지 /home/kyle/some/dir/
. 그 디렉토리를 얻는 방법이 있습니까?
답변
설명서를 다시 살펴본 후 발견했습니다. 내가 찾고있는 것은 __filename
및 __dirname
모듈 수준 변수였습니다.
__filename
현재 모듈의 파일 이름입니다. 현재 모듈 파일의 해결 된 절대 경로입니다. (예 :/home/kyle/some/dir/file.js
)__dirname
현재 모듈의 디렉토리 이름입니다. (예 :/home/kyle/some/dir
)
답변
그래서 기본적으로 당신은 이것을 할 수 있습니다 :
fs.readFile(path.resolve(__dirname, 'settings.json'), 'UTF-8', callback);
‘/’또는 ‘\’와 연결하는 대신 resolve ()를 사용하십시오. 그렇지 않으면 플랫폼 간 문제가 발생합니다.
참고 : __dirname은 모듈 또는 포함 된 스크립트의 로컬 경로입니다. 메인 스크립트의 경로를 알아야하는 플러그인을 작성하는 경우 다음과 같습니다.
require.main.filename
또는 폴더 이름을 얻으려면 다음을 수행하십시오.
require('path').dirname(require.main.filename)
답변
이 명령은 현재 디렉토리를 반환합니다.
var currentPath = process.cwd();
예를 들어, 경로를 사용하여 파일을 읽으려면 다음을 수행하십시오.
var fs = require('fs');
fs.readFile(process.cwd() + "\\text.txt", function(err, data)
{
if(err)
console.log(err)
else
console.log(data.toString());
});
답변
__dirname을 사용하십시오 !!
__dirname
현재 모듈의 디렉토리 이름. 이것은의 path.dirname ()과 동일합니다 __filename
.
예 : / Users / mjr에서 example.js 노드 실행
console.log(__dirname);
// Prints: /Users/mjr
console.log(path.dirname(__filename));
// Prints: /Users/mjr
https://nodejs.org/api/modules.html#modules_dirname
ESModules의 경우 다음을 사용하려고합니다.
import.meta.url
답변
기본 스크립트와 관련하여 다음과 같이 간단합니다.
process.argv[1]
로부터 Node.js를 문서 :
process.argv
명령 행 인수를 포함하는 배열입니다. 첫 번째 요소는 ‘node’이고 두 번째 요소는 JavaScript 파일의 경로 입니다. 다음 요소는 추가 명령 줄 인수입니다.
모듈 파일의 경로를 알아야하는 경우 __filename 을 사용 하십시오 .
답변
10 개 지원 Node.js를 ECMAScript를 모듈 , __dirname
그리고 __filename
더 이상 사용할 수 있습니다 .
그런 다음 현재 ES 모듈 의 경로 를 얻으려면 다음을 사용해야합니다.
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
현재 모듈을 포함하는 디렉토리의 경우 :
import { dirname } from 'path';
import { fileURLToPath } from 'url';
const __dirname = dirname(fileURLToPath(import.meta.url));
답변
var settings =
JSON.parse(
require('fs').readFileSync(
require('path').resolve(
__dirname,
'settings.json'),
'utf8'));