[node.js] Node.js를 사용하여 현재 스크립트의 경로를 얻으려면 어떻게해야합니까?

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'));