MrEvil
그는 물었다 8년 전
284

실행 중인 응용 프로그램 프로젝트를 통해 사항결정 스크립트루트 node. js

보다 더 나은 방법이 있을 수 있다 ' ()' 을 프로세스지크문드 루트 디렉터리에 사항결정 실행 중인 node. js 실행됩니까? 같은 일이 있으나, 노엘가이스트 레일스트로트 '에' # 39 m, i& 생각하신거야 찾는 것으로 예측 가능하고 안정적인 수 있다.

Dave Newton
그는 6년 전 댓글을 달았습니다
1

모든 기회를 줄 수 있는 un 동의하십시오 수락됨, 오류, 답?

Alexander Mills
그는 5년 전 댓글을 달았습니다
8

'시도하시겠습니까 프로세스트런버트프우드'. 제 대답은 볼 수 있습니다.

답변 26 개

이 방법은 여러 가지가 있습니다 외곽진입 있으며 각기 장단점이:

레키레드메인스피렌임

(Http://nodejs.org/api/modules.html&gt) 에서 <;:

&gt. 그 때 ',' 에서 직접 노드입니다 파일이 실행하십시오 레키레드메인 설정되었습니다 '모듈에서는'. 즉, 직접 파일을 실행한 테스트를 통해 '= 모듈에서는 레키레드메인 여부를 결정할 수 있습니다' &gt. &gt. '는' 때문에 '모듈에서는 파일_이름' 속성 (일반적으로) 와 '_filename') 는 현재 응용 프로그램 '검사' 레키레드메인스피렌임 진입점이 얻을 수 있습니다.

그래서 스케쳐내 기본 app 디렉토리로 할 수 있습니다.

var path = require('path');
var appDir = path.dirname(require.main.filename);

장점 &amp. 단점

이렇게 하면 작동합니까 멋지구리해요 대부분의 경우, re 신앙이니라 you& # 39 에서 app 를 시작 시험 운영에 같은 pm2 또는 실행 mocha-ae 이 방법을 실패합니다.

글로벌. X

노드는 노드전역 이름공간이 객체에는 '-' 글로벌 불렀으매 아무 것도 할 수 있는 이 객체를 사용할 수 있어 어디서든 연결할 수 있는 '이네스트제스' 앱 (app '또는' 또는 '아프자이스 있는모든 주 업무는 파일은 index.), 그냥 전역 변수를 정의할 수 있습니다.

// index.js
var path = require('path');
global.appRoot = path.resolve(__dirname);

// lib/moduleA/component1.js
require(appRoot + '/lib/moduleB/component2.js');

장점 &amp. 단점

즉, 일관되게 작동됨 확장하지만 의존해야 노드전역 가변으로 너회가 can& 쉽게 재사용합니다 t # 39, 구성 요소 / etc.

프로세스지크문드 ()

현재 이 되돌려줍니다 apc® 디렉터리입니다. # 39 에 전적으로 의존하고 있기 때문에, it& 전혀 신뢰할 수 있는 것은 어떤 과정을 통해 출범한 디렉토리에는 :

$ cd /home/demo/
$ mkdir subdir
$ echo "console.log(process.cwd());" > subdir/demo.js
$ node subdir/demo.js
/home/demo
$ cd subdir
$ node demo.js
/home/demo/subdir

앱 루트 경로

이 문제를 해결하기 위해 만든 노드입니다 모듈에서는 i& # 39, ve 불렀으매 [앱 루트 경로] (https://github.com/inxilpro/node-app-root-path) . 사용 방법은 간단합니다.

var appRoot = require('app-root-path');
var myModule = require(appRoot + '/lib/my-module.js');

[앱 루트 경로] (https://github.com/inxilpro/node-app-root-path) 는 여러 개의 루트 경로를 파악하기 위해 여러 가지 기술을 모듈에서는 전역으로라는 애플리케이션 (앱) 을 고려하여 설치된 모듈 (예를 들어, app 가 운영하는 '/ var / / 그런데 모듈에서는 korea. 설치된 /.nvm/v0.x.x/lib/node/' ~ '). # 39 이 won& it& # 39 시간은 없으나, s, t 작동합니까 100% 의 일을 가장 일반적인 시나리오에서와.

장점 &amp. 단점

대부분의 경우 구성 없이 작동됨. 또한 일부 추가 편의 좋은 서버리스 (프로젝트 페이지를 참조). # 39, 단순하게 작동하는 것이 가장 큰 단점 won& 경우:

39, re - You& 사용하여 같은 시작, pm2

  • , 와 # 39, s, t # 39 모듈에서는 isn& 너회의 app& 내부에 설치된 'node_modules' 디렉토리 (예를 들어, it 전역으로라는 설치한 경우)

환경 변수 설정 '또는' APP_ROOT_PATH 인컨텍스트 통해 얻을 수 있으며, 이를 중심으로 ' ()' 를 호출하여 오스트발트 모듈에서는 있지만, 이 경우, 아마도 '글로벌' 방법을 사용하여 you& # 39 쪽의 좋습니다.

NODE_PATH 환경 변수

    • 39, re you& 경우 현재 애플리케이션 (앱) 을 확인할 수 있는 방법을 찾고 루트 경로 중 가장 적합합니까 당신꺼에요 위의 솔루션뀉뀉뀉뀉 것으로 보인다. 반면, # 39 한 경우, re you& 문제를 해결할 수 있는 환경 변수 '를' 내가 매우 안정적으로 로드중 app 모듈에서는 추천합니까 NODE_PATH.

39 의 node& [모듈에서는 시스템] (https://nodejs.org/api/modules.html) 는 모듈에 대한 다양한 위치에. [한 곳에서 '는' 이 위치에 process.env.NODE_PATH 방향점] (https://nodejs.org/api/modules.html # modules_loading_from_the_global_folders). 이 경우, 그런 다음 필요한 모듈을 통해 '환경 변수 설정 없이' 표준 모듈에서는 로더입니다 다른 변경.

예를 들어, '를', '세트' NODE_PATH / var / korea. / lib 다음 그냥 그랬다고 협력할 것이라고 말했다.

require('module2/component.js');
// ^ looks for /var/www/lib/module2/component.js

이렇게 ':' 고궁박물원 사용할 수 있는 좋은 방법입니다

"scripts": {
    "start": "NODE_PATH=. node app.js"
}

이제 시작 '과' 고궁박물원, re 골든 you& # 39 에서 app 를 시작합니다. 내가 내 입으로 합칩니다 이 [노드 경로를 적용] (https://github.com/inxilpro/enforce-node-path) 모듈에서는 방지하는 '앱' 없이 실수로 로드중 node_path 설정되었습니다. 한층 더 강화하여 제어할 수 있는 환경 변수, 참조 [체켄프] (https://github.com/inxilpro/node-checkenv).

          • 바깥쪽인지가 노드의 gotcha:* NODE_PATH 설정해야 합니다 '한' 앱 '= 파트리어솔베 process.env.NODE_PATH 같은 일을 수 없습니다. (_dirname)' 이 것 때문에 모듈에서는 로더입니다 캐시합니다 전에 디렉토리 목록을 검색 사용자의 앱 런입니다.
  • 4/6/16 [추가] * 또 다른 매우 유망한 모듈에서는 이 문제를 해결하기 위해 시도하는 것은 [물결치는] (https://github.com/kolodny/wavy).

inxilpro
Ryan Wu
그는 7년 전 댓글을 달았습니다
0

프로젝트 작동하잖아 on my 닻을 올렸다. tks 는.

Andrew Joslin
그는 7년 전 댓글을 달았습니다
0

감사합니다! 그냥 이를 활용한 :-)

Kevin
그는 6년 전 댓글을 달았습니다
0

s # 39, 이 yield& mocha-ae 용지함 디렉터리입니다 가져다줄래요: '/usr/local/lib/node_modules/mocha/bin'. 내가 뭘 놓친거야?

inxilpro
그는 6년 전 댓글을 달았습니다
1

이 경우 응용 프로그램의 진입점이 mocha-ae @kevin 있다. 이것은 단지 예를 들어, 왜 &quot 찾기 프로젝트 root&quot. 너무 너무 많은 어려움이 &quot root.&quot 의해 무슨 뜻인지, 프로젝트 및 상황에 따라 다릅니다.

Kevin
그는 6년 전 댓글을 달았습니다
0

@inxilpro 인 것 같군. 난 그냥 테스트할 수 있는 앱을 실행할 수 있는 장치를 상태입니까 mocha-ae 의해 시작되었다. 어딜가 내가 afaq 선수단 희망한 프로젝트 루트, 루트 디렉터리이고 프로젝트를 실행하는 프로그램을 설치할 발생했습니까 없습니다.

inxilpro
그는 6년 전 댓글을 달았습니다
1

@Kevin 그 점은 충분히 이해합니다. 요점은 바로 总监和首席信息官完全了解 &quot, 프로젝트 root&quot. human computer 비해 훨씬 더 쉽게 이해하기 위해 있다. 원할 경우 간편한 방법을 구성해야 합니다. '시간' 이 아니라 all most 작동합니까 레키레드메인스피렌임 사용하여 시간을 보냅니다.

inxilpro
그는 6년 전 댓글을 달았습니다
0

내가 you& @kevin 의심의 여지가 있지만, 이 같은 최신 업데이트 (dynamic update) '' re still # 39 보러 모듈에서는 앱 루트 경로 수 있도록 도와야 한다.

inxilpro
그는 6년 전 댓글을 달았습니다
2

탄젠트 방향으로 관련. 이 과정은 매우 영리한 방식으로 프로젝트를 구성할 수 있도록 노드입니다 don& # 39, 이 문제를 너무 걱정할 필요는 없다. http://allanhortle.com/2015/02/04/store-your-client-code-in-node_modules.html

Eagle
그는 5년 전 댓글을 달았습니다
0

해당 링크를 만들 수 있는 멋진, 그냥 '는 @inxilpro 작동하잖아 사일스제스 node_modules api / 컨트롤러에서는 δ1' '폴더'. 그런 다음 필요한 경로와 작동됨 없이 단순히 '이'

Justin Warkentin
그는 4년 전 댓글을 달았습니다
0

39, 내가 don& 변화가 있는 것은 't know if there was pm2 또는 변경' pm2 작동합니까 레키레드메인스피렌임 node. js 보인다. # 39, mocha-ae don& 대해 알 수 없다.

Cory Robinson
그는 4년 전 댓글을 달았습니다
8

'파트리파스 오드리' (프로세스자맹모두레스피렌임)

Noah Passalacqua
그는 4년 전 댓글을 달았습니다
0

그래서 내가 이해할 수 있으나 일반적으로 사용하는 '글로벌' 밤은 좋은 일인 글로바우드라프 = {} 의 루트 디렉터리 또는 다른 간단한 문장열 root:_dirname 않음 '정의' 를 기본 파일 작업을 수행할 수 있는 'way i just do' 이프트로트 어디든요?

inxilpro
그는 4년 전 댓글을 달았습니다
0

39 의 @noahpassalacqua There& 본질적으로 그것은 그것 때문에 조금 더 좋지 않을 수 없는 문제가 아니라 이제 you& 코드에서 # 39, re 의존하는 것은 특정 전역 설정할 수 있습니다. # 39 의 it& 암시적입니다 뭔가 상관 관계 아마도 어느 정도 될 수 있으며 디버그로 난이도 있는 끊어집니다.

Sam Holmes
그는 3년 전 댓글을 달았습니다
1

39 의 루트 디렉터리에서 애플리케이션 I& 꽤 팬으로, m = 파트리어솔베 global._root (_dirname) '도' 를 따릅니다 연산뿐 밑줄 및 손쉽게 파악할 수 있고 어디서나 동일한 검색하겠습니다 할 수가 없어요.

faressoft
그는 3년 전 댓글을 달았습니다
0

왜 'here' 사용 '파트리어솔베 파트리어솔베 (_dirname),'. '' _Dirname 어떻게 다릅니까?

inxilpro
그는 3년 전 댓글을 달았습니다
0

39 의 @faressoft that& 좋은 점. # 39, t 좁히어 상행담관염이라고 shouldn& 될 것입니다. 경우에 따라 웹팩 ',' _dirname 컴파일하십시오 노드입니다 library 를 사용할 때 같은 웹 절대 하지만 경로 shouldn& 일이 아닐 수 있는 t really 목마르겠구나 # 39.

user752746
그는 3년 전 댓글을 달았습니다
0

이는 매우 도움됐네! 포드는 &amp 자세한 설명 감사드립니다. 각 솔루션에 대한 단점.

Vegaaaa
그는 2년 전 댓글을 달았습니다
0

좋은 아이디어를 통해 스크립트루트 정의하십시오 NODE_PATH!

Jon Wyatt
그는 2년 전 댓글을 달았습니다
1

'start&quot ";: &quot NODE_PATH =. '.', '결과 app.js&quot 노드입니다 ipv6-literal. 기술입니까 반환되었습니다 δ1 앱 for me. 내가 사용해야 했습니다.

= $ PWD '' NODE_PATH afaq 실제 경로에 process.env.NODE_PATH ''

PrimeLens
그는 2년 전 댓글을 달았습니다
0

누구 할 때 사용할 수 있는 신뢰할 수 있는 솔루션으로 호스팅된 헤로쿠 및 또는 AWS 콩나무? 그러나 이 고궁박물원 스크립트에만 NODE_PATH = 가장 큰 로컬호스트 사용할 수 있습니다

estani
그는 10달 전 댓글을 달았습니다
0

글로벌 환경 변수를 설정하는 것과 비슷한 가변적입니다 솔루션이므로 이 더 좋아요. 'process.env.NODE_ROOT = 파트리어솔베 (_dirname),' 은 동일하지만, t # 39 단순화됩니다 doesn& 코드. 아마 추가할 수 있습니다.

39 t ',' _dirname isn& 노드전역. 그래서 현재 모듈에서는 it& # 39 의 로컬 파일별 마다 다른 값을 로컬이며.

스케쳐내 디렉터리이고 실행 중인 프로세스를 사용하여 루트 () '여러분' 프로세스지크문드 싶단다.

스케쳐내 예측 가능성 및 신뢰성, 그리고 아마 이 조건을 특정 응용 프로그램 환경 변수를 만들 필요가 있는 설정되었습니다. 네 찾습니다 '앱' (또는 기타), s # 39 MY_APP_HOME 아웃하기로 it& 좁히어, 응용 프로그램 존재하는 모든 것을 디렉터리입니다 단순화표현 잘. # 39 디렉토리에는 정의되지 않은 경우, 또는 응용 프로그램 오류로 종료 후 t 컨테인먼트하는 doesn& prompting 사용자가 가변적입니다 만듭다 합니다. 설정할 수 있다는 점에서 일부로 설치하는 과정이다.

뭔가 'like' 에서 환경 변수를 노드입니다 process.env.MY_ENV_VARIABLE 함께 읽을 수 있습니다.

pkyeck
Myrne Stol
그는 7년 전 댓글을 달았습니다
2

二쇱쓽 사용하는 경우, 이 꽤 잘 할 수도 있다. 다른 결과를 열거하십시오 'vs' 할 때 'bin/server.js 되지만, cd 용지함 &amp &amp. 세르베리에스 '. (단 이 js 파일을 실행 중인 표시되어 있습니다)

Diogo Sperb
그는 2년 전 댓글을 달았습니다
1

' ()' 의 매력은 협력했습니다 프로세스지크문드 사용하여 실행할 때, 심지어 같은 가져다줄래요 mocha-ae 테스트. 감사합니다!

1 - call it 프로젝트의 세스팅스.j스 루트 파일 작성

이 코드는 있는 이 파일 추가 2 -

module.exports = {
    POST_MAX_SIZE : 40 , //MB
    UPLOAD_MAX_FILE_SIZE: 40, //MB
    PROJECT_DIR : __dirname
};

3 - δ1 node_modules 이름을 새로 만드는 모듈에서는 &quot settings"; 및 내부 모듈에서는 이네스트제스 쓴 코드:

module.exports = require("../../settings");

4 - 및 언제든지 운영까지도 프로젝트에 디렉터리입니다 됩니다

var settings = require("settings");
settings.PROJECT_DIR; 

이렇게 하면 모두 이 파일에 대한 프로젝트 디렉터리용 상대치;)

goliatone
그는 7년 전 댓글을 달았습니다
32
  • 1: 읽어들입니다 설정 파일을 다시 해당 파일의 경로를 프레젠테이션이든 참조입니다 패스를 합니다? 아무 것도 해결할 수 없습니다.
Fareed Alnamrouti
그는 7년 전 댓글을 달았습니다
1

제발 내 편집하십시오 @goliatone 확인할 수 있습니다:)

goliatone
그는 7년 전 댓글을 달았습니다
2

방문해 주셔서 업보테드 검토하고 있지만, 그 느낌이 지금도 멸종될 수 있기 때문에 그냥 편집하십시오 할 수 있는 이를 달성하기 위해 더 나은 방법이 아닙니다.

Travesty3
그는 4년 전 댓글을 달았습니다
6

뭔가 사용자가 원하는 것을 명심해야 할 것은 '자주' 는 이 방법을 통해 node_modules 배제된 버전 제어입니다. 네가 만일 네 팀이 필요로 또는 작동합니까 클론할 리포지토리를 you& # 39, ll 내놓아야 할 것을 막을 수 있는 또 다른 솔루션을 설정 파일 동기화.

Fareed Alnamrouti
그는 3년 전 댓글을 달았습니다
0

실제로 빈 모듈에서는 설정을 모듈에서는 @travesty3 컨텐트에서 의 프로젝트 루트 파일 즉 익스포트하기 p

해당 경로를 통해 자신의 솔루션이므로 @goliatone 파일을 내려받습니다 어디서부터든 모른 채 할 수 있습니다, all you know is &quot settings";). 그렇지 않으면 명시적으로 했습니다 폴더 백업하도록 아웃해야 도달할 때까지 얼마나 많은 프로젝트 디렉터리입니다. 이 때문에 항상 자동으로 검색 및 작동됨 노드입니다 node_modules 계시나니 위치를 확인할 수 있다.

Abhishek Sharma
그는 3년 전 댓글을 달았습니다
0

app 의 파일 루트 디렉토리 세스팅스.j스 움직이십시오 @fareednamrouti 생기는 경우, 예를 들어, 다른 위치로 &lt app_root_path&gt, /settings/settings.py 그런후에도 너회의 코드 분리. 실제로 한 단계 더 나은 약간만이라도 &quot hardcode"; (이 자체가 잘못된 그래도 뭐보다 이것을 수행되) 실제 경로로 기도하라주여 PROJECT_DIR: &quot .";

나중에 누군가 선택했습니까 이동합니까 이 변경할 수 있습니다.

Fareed Alnamrouti
그는 3년 전 댓글을 달았습니다
0

하지만 (settings.py) 는 파이썬 lol

Fareed Alnamrouti
그는 3년 전 댓글을 달았습니다
0

이 때문에 항상 작동합니까 안와 _dirname 변수

가장 쉬운 방법은 전역 루트 ( 가정할 때 사용하는 고궁박물원 실행하기 위한 start& # 39, & # 39 node. js 앱, 고궁박물원 등 )

var appRoot = process.env.PWD;

  • 위의 * 교차 확인 하려면

'설정' 라고 할 수 있는 크로스 체크 프로세스트런버트프우드 거짓말엔 node. js 프로그램. 일부 런타임용으로 개발하십시오 테스트를 스케쳐내 점검에 프로세스트런버트프우드 ',' 크로스 체크 수 있습니다 또한 이 코드 (제가 하는 일을 잘 쓴 것 같다). 마지막 폴더에 있는 자신의 이름을 크로스 체크 수 있습니다 아프로트 npm_package_name 파커게.j슨 파일, 예를 들면 다음과 같습니다.

    var path = require('path');

    var globalRoot = __dirname; //(you may have to do some substring processing if the first script you run is not in the project root, since __dirname refers to the directory that the file is in for which __dirname is called in.)

    //compare the last directory in the globalRoot path to the name of the project in your package.json file
    var folders = globalRoot.split(path.sep);
    var packageName = folders[folders.length-1];
    var pwd = process.env.PWD;
    var npmPackageName = process.env.npm_package_name;
    if(packageName !== npmPackageName){
        throw new Error('Failed check for runtime string equality between globalRoot-bottommost directory and npm_package_name.');
    }
    if(globalRoot !== pwd){
        throw new Error('Failed check for runtime string equality between globalRoot and process.env.PWD.');
    }

고궁박물원 모듈에서는 사용할 수도 있습니다. '필요한 (& # 39, app-root-path& # 39;)' 이 목적을 위해 아주 잘 작동하는

Alexander Mills
Jeremy Wiebe
그는 3년 전 댓글을 달았습니다
3

이 작품은 멋지구리해요 (대부분) 의 유닉스 시스템. 빨리 너랑 'PWD' 는 Windows 에서 정의되지 않은 일을 고궁박물원 모듈에서는 / app 이 작동하지 않습니다.

Alexander Mills
그는 2년 전 댓글을 달았습니다
0

왜 항상 프로젝트 루트 () '' 프로세스지크문드 @muhammadumer 동일합니까?

Muhammad Umer
그는 2년 전 댓글을 달았습니다
0

39 될 경우 그 다음 전화하시기 루트 파일 it&; d

39, ve i& 결과 이 작품을 통해 지속적으로 가져다줄래요 때도 호출되었을 응용 프로그램이 될 수 있으므로, 하위 테스트 등 일부 프레임워크와도 mocha-ae:

process.mainModule.paths[0].split('node_modules')[0].slice(0, -1);

왜 작동하잖아:

전체 경로를 런타임에 노드입니다 레지스트리로 모든 로드됨 파일을 만듭니다. 첫째, 그리하여 이 모듈은 로드되었는지 맨 위에 레지스트리로. 첫 번째 요소를 선택하여 & # 39, 레지스트리 경로 및 반납 전에 node_modules& # 39. 루트 디렉토리 우리는 확인할 수 있는 프로그램.

39 의 it& 단 한 줄의 코드를 simplicity& # 39 의 좀 그렇지만, 난 검은 사항박스형 it 를 고궁박물원 모듈에서는 (내 sake):

https://www.npmjs.com/package/node-root.pddivine

즐거운 시간 되세요!

mhlavacka
그는 2년 전 댓글을 달았습니다
0

39, t 작동합니까 doesn& 고궁박물원 내부에 쉽다.

아마 가면 볼 수 있습니다 "에서 찾을 수 있는 '뒤', '이동할 때까지 _filename 파커게.j슨 that& # 39 의 기본 파일, 디렉터리 현재 속합니다.

이러한 모든 &quot 스크립트루트 dirs"; 일부 가상 경로를 주로 해결해야 할 수 있기 때문에 실제 pile 경로를 살펴봐야 합니다 파트리어솔베 '?'

var path= require('path');
var filePath = path.resolve('our/virtual/path.ext");

사실 다운로드합니까 사소한 솔루션 역시 아마도 가장 강력한: 다음 파일을 프로젝트에 디렉터리이고 배치하십시오 루트에 됩니다. 디스크입니다. diskid root-path.js 다음 코드:

import * as path from 'path'
const projectRootPath = path.resolve(__dirname)
export const rootPath = projectRootPath

이 같은 단순한 선 것은 아프자이스 데이터베이스에구성원을 모듈에서의 추가, 일반적으로 루트

global.__basedir = __dirname;

그리고 모든 너회의 모듈에서는 _basedir 아치에시이블 됩니다.

이미 이 번호요 그러니까말이야 늦었음요. 두 가지 방법을 통해 스크립트루트 uirl 페치할 할 수 없다

첫 번째 방법

var path = require('path');
path.dirname(require.main.filename);

두 번째 방법

var path = require('path');
path.dirname(process.mainModule.filename);

링크 - https://gist.github.com/geekiam/e2e3e0325abd9023d3a3 참조

39 를 사용할 경우 유용한 express 는 I&, ve 추가할 수 있는 기술은 다음과 같이 아프자이스 필요한 전에 다른 라우팅합니다 설정할 수 있습니다.

// set rootPath
app.use(function(req, res, next) {
  req.rootPath = __dirname;
  next();
});

app.use('/myroute', myRoute);

글로벌 필요 없이 사용할 수 있고 그 길은 속성으로 루트 디렉터리에 요청을 객체에는.

이 프로젝트의 경우 작동됨 아프자이스 루트 () 은 어떤, 기본적으로는.

There is an '에' 프로세스드네프 INIT_CWD '속성'. 이게 I& # 39 m, 현재 내 작업 중이다.

const {INIT_CWD} = process.env; // process.env.INIT_CWD 
const paths = require(`${INIT_CWD}/config/paths`);

행운을 빕니다.

JamesDev
그는 9달 전 댓글을 달았습니다
1

같은 it 프로젝트에 대한 매력을 협력했습니다 패키지이므로 조작할 호출되는 포스틴스탈 에서 한 단계. 그러나 아직 테스트되었습니다 종속, 여기서 나는 또 다른 레이어에는 프로젝트 는 사용하는 패키지 의존성을 내.

Akash
그는 9달 전 댓글을 달았습니다
1

',' 수 '있는' 디렉터리입니다 @jamesdev INIT_CWD 보정됩니다 '는' 고궁박물원 스크립트입니다 에스치우드.

주 업무는 애플리케이션 (앱) 이 일을 시작하기 위한 추가 파일 (예를 들면 아프자이스):

global.__basedir = __dirname;

이렇게 하면 항상 avamer 노드전역 변수의 데이터베이스에구성원을 app& # 39 의 기본 디렉터리 사용해 다른 마찬가지로 변수.

const yourModule = require(__basedir + '/path/to/module.js');

단순해졌습니다.

섹시 & # & # 127995 .&lt br/&gt 128131 (make it,,

const users = require('../../../database/users'); // 👎 what you have
// OR
const users = require('$db/users'); // 👍 no matter how deep you are
const products = require('/database/products'); // 👍 alias or pathing from root directory
&lt br/>;

3 단계만으로 문제의 해결을 추악한 경로.

  1. 설치처 숨겨요: save ',' 고궁박물원 설치처 섹시 합니다. &lt br/&gt.
  2. 필요한 (# 39, & # 39, sexy-require&) '' 포함시키십시오 한때 상단형 주 업무는 애플리케이션 절실해졌습니다.

필요한 (# 39, & # 39 sexy-require&;). const 라우터에 필요한 (& # 39, /routers& # 39;), = const apiu 필요한 (& # 39, $ # 39, api&), = .

  1. 옵션임 단계입니다. 루트 파일 경로를 정의될 수 있는 '구성' 스파스 디렉터리이고 도와드립니다.

/server/database db = $ = $ v1 api /server/api/legacy = $ api v2 /server/api/v2

JHH
그는 10달 전 댓글을 달았습니다
0

그런 말도 안 되는 나쁜 명이었지만, 고쳐주렴 이름 괜찮은 것 같다.

sultan
그는 9달 전 댓글을 달았습니다
0

@JHH 설명이다. 내가 더 나은 이름을 찾을 수 있었다.

내가 이.

내 이름이 '미모두리 모듈에서는'

'var BASE_DIR = _dirname.replace (/ ^ (.\/mymodule) $1& # 39, & # 39 (제공합니다.) $ /;;)'

맨 위에 기본 파일 추가:

mainDir = __dirname;

그럼 믿지아니하며 원하는 파일을 사용한다.

console.log('mainDir ' + mainDir);

  • '-' 는 현재 파일에 정의된 전역으로라는 맹디르 _dirname '대신' 에서만 필요할 때 사용.
  • 주 () 은 일반적으로 루트 폴더에 파일이 프로젝트 및 ',' ',' like '맹자이스 이네스트제스 굴피레이제스'.

실행 중인 응용 프로그램 프로젝트를 통해 확인할 수 스케쳐내 스크립트루트 node. js 너무 됩니다. "' 프로세스자맹모두리드패스 "'

이 일을 할 것이다.

path.join(...process.argv[1].split(/\/|\\/).slice(0, -1))

루트 경로를 찾는 전자 까다로운 앱 받을 수도 있다. 루트 경로는 차이가 있기 때문에 다른 조건에서, 개발 및 생산 등 주요 프로세스 및 렌더러입니다 패키지된 로드하십시오.

I have a 고궁박물원 기록되었으므로 패키지 전자 루트 경로 캡처하려면 루트 경로를 전자 app.

$ npm install electron-root-path

or 

$ yarn add electron-root-path

// Import ES6 way
import { rootPath } from 'electron-root-path';

// Import ES2015 way
const rootPath = require('electron-root-path').rootPath;

// e.g:
// read a file in the root
const location = path.join(rootPath, 'package.json');
const pkgInfo = fs.readFileSync(location, { encoding: 'utf8' });

그러나 오래된 질문, '' 프로그레스콜라리프 언급하십시오 그러니까말이야 질문을 받지 않고 사용할 수 있습니다. 전체 경로와 (스이스 사용하거나 사용하지 않고 확장명으로) 에는 argv 어레이입니다 사용된 매개변수입니다 노드별 실행할 수 있다. 이 때문에 이 플래그를 필터링해야 합니다 포함될 수도 있습니다.

직접 사용하는 예가 아닐 수 있습니다 (때문에 내 스스로 프레임워크를 사용하여) 이지만 어떤 생각 것 같은데 어떻게 할 수 있습니다. 난 또 그런 상황을 피하기 위한 방법을 사용하여 시스템이 너무 스트레스, 특히 이 함수를 호출하는 캐시에는 확장명은 지정되지 않은 경우 (및 파일 존재 확인 필수) (예:

node myfile

또는

node myfile.js

39, it, see also 코드 s that& 캐시하지 이유는 다음과 같습니다.

-

function getRootFilePath()
{
        if( !isDefined( oData.SU_ROOT_FILE_PATH ) )
        {
            var sExt = false;

            each( process.argv, function( i, v )
            {
                 // Skip invalid and provided command line options
                if( !!v && isValidString( v ) && v[0] !== '-' )
                {
                    sExt = getFileExt( v );

                    if( ( sExt === 'js' ) || ( sExt === '' && fileExists( v+'.js' )) )
                    {

                        var a = uniformPath( v ).split("/"); 

                         // Chop off last string, filename
                        a[a.length-1]='';

                         // Cache it so we don't have to do it again.
                        oData.SU_ROOT_FILE_PATH=a.join("/"); 

                         // Found, skip loop
                        return true;
                    }
                }
            }, true ); // <-- true is: each in reverse order
        }

        return oData.SU_ROOT_FILE_PATH || '';
    }
}; 

루트 디렉터리 경로를 추가하면 됩니다 익스플레스 app 의 경로 앱 '이 추가 변수 및 afaq afnor 애워싸노라 대퍼스트 (& # 39,, # 39 rootDirectory& _dirname),' in your 이네스트제스 또는 아프자이스 절실해졌습니다. (# 39, & # 39, rootDirectory&) '및' 레크.app.제 사용하여 루트 디렉터리 경로를 얻기 위해 코드에서.

process.mainModule.paths
  .filter(p => !p.includes('node_modules'))
  .shift()

모든 경로에서 얻을 수 있는 기본 모듈 및 필터링합니다 &quot node_modules"; 그럼 우선 내려받습니다 나머지 경로를 목록. 예기치 못한 비헤이비어가 오류, 그냥 정의되지 않은 '한' 던져 않습니다.

제대로 가져다줄래요, 심지어 ie 를 호출할 때 '$ mocha-ae'.

  • 만드는 기능을 아프자이스 *

  • '앱 스크립트루트 folder afaq Function' *

var appRootFolder = function(dir,level){
    var arr = dir.split('\\');
    arr.splice(arr.length - level,level);
    var rootFolder = arr.join('\\');
    return rootFolder;
}

// view engine setup
app.set('views', path.join(appRootFolder(__dirname,1),'views'));

그냥 사용:

 path.resolve("./") ... output is your project root directory

Noel Schenk
그는 일 년 전 댓글을 달았습니다
0

이 작품은 엄청난거야!

파트리어솔베 (.&quot ";)

뿐만 아니라 작동됨

orad
그는 일 년 전 댓글을 달았습니다
0

현재 디렉터리인 않을 수 있는 단 보기입니다 스크립트루트 디렉터리입니다.

시도하시겠습니까 path._makeLong (& # 39, some_filename_on_root.js& # 39;) ','

예:

cons path = require('path');
console.log(path._makeLong('some_filename_on_root.js');

전체 경로를 통해 노드입니다 루트로부터의 반환되므로 있는 응용 프로그램 (동일한 위치를 파커게.j슨)

루트 디렉토리, _dirname 너회가 부여하느뇨 deltamove you& # 39, re in a # 39 의 루트 디렉터리에 파일 that&.

// ProjectDirectory.js (this file is in the project's root directory because you are putting it there).
module.exports = {

    root() {
        return __dirname;
    }
}

일부 다른 파일:

const ProjectDirectory = require('path/to/ProjectDirectory');
console.log(`Project root directory is ${ProjectDirectory.root}`);

Andrew Koster
Design by Adrian
그는 일 년 전 댓글을 달았습니다
1

따라서, t # 39 제공하십시오 doesn& 루트 디렉터리입니다.

Andrew Koster
그는 일 년 전 댓글을 달았습니다
0

뭐? 이를 이용하면 스크립트루트 디렉터리입니다. 발라봐 Js 파일을 제환자의 액세스하려면 project& # 39 의 루트 디렉토리 내의 수 없는 몇 가지 이유로? As long as you are, JS 객체 생성 및 할꺼이나 확인란 _dirname. 이 보장된 작동합니다.

Akim Kelar
그는 일 년 전 댓글을 달았습니다
1

루트 디렉토리 설게에 따른 @andrewkoster _dirname 언약보다는 제공하십시오 때문에 현재 디렉터리 이름을 스크립트입니다 있습니다. 또 변경할 수 있고, 충스러웠으니 스크립트입니다 스크립트입니다. 할꺼이나 경우 약 1 만 더 이상 및 서술, 그냥 우연히 동일합니까 닥로트 대답하도다 - 닥로트 내에 저장된 아프자이스 있습니다.

Andrew Koster
그는 일 년 전 댓글을 달았습니다
0

39 의 it& 아닌 경우) 는 우연히 이 프로젝트디레스리자이스 루트에 디렉터리인 넣어 좁히어 고의적으로요 . # 39 의 기능을 지원하는 솔루션을 설계 작업 it& I& # 39, ve 올라왔다.