2015-01-04 2 views
8

각 프로젝트에 대해 npm 모듈을 로컬로 설치하여 vendor/node_modules에 설치하고 package.json 파일을 참조하십시오. 즉 매우 간단합니다 -벤더에 node_modules 설치

나는 공급 업체 폴더

내가 정자를 가지고 .bowerrc에 나는 bower_components 경로를 지정 package.json을 이동하고 싶지 않아요.

npm으로 어떻게 할 수 있습니까?

나는 워드 프로세서, npmrc 워드 프로세서, 몇 가지 질문을 여기에서 읽고, 한 시간 이상 낭비했다. 여전히 운이 없다. 이것은 쉬운 일을하기에는 엄청나게 어렵습니다.

나는 빼기에 신경 쓰지 않고, 마침내 그렇게하는 방법을 알려줍니다.

답변

2

내장 된 npm 기능을 사용할 수 없습니다.

This discussion (npm github 저장소에 있음). FAQ의 일부인 this answer에서도 다루어지고 있습니다.

당신은 여전히 ​​require("./vendor/whatever") 구문을 사용하여 호출 후 /vendor 디렉토리에 모듈을 복사하여 "수동으로"를 설치 수를 할 수 있습니다 ...하지만 새 사용자 정의 위치를 ​​사용하는 각 require 요구를 의미한다. 이 문제를 처리 할 수있는 몇 가지 방법이 있지만 맞춤 위치를 조정하기 위해 소스에서 추가 작업을하고 있다는 것을 의미합니다.

preinstall.js : 더는 임의의 하위 폴더에 node_modules 폴더에 설치하는 방법으로 만들 수있을 것 같습니다 없다는 사실에 의해 좌절

+0

** 당신은 할 수 없습니다 ** 'npm' 여기에 설명 된 패키지를 찾는 노드의 알고리즘을 사용합니다. 당신은 수정해야 할 것입니다 귀하의 'node' 바이너리를 지원하기 위해 "vendor/node_modules" –

+0

사실입니다,하지만 npm은 커스텀 디렉토리에 설치되지 않습니다. 노드가 다양한 node_modules 위치를 걷기 전에 사용할 경로를 제공 할 수는 있지만 npm은 node_modules를 설치하지 않습니다. 따라서 npm을 사용하지 않고 기술적으로 노드 프로젝트를 작성할 수는 있지만 모든 요구에 대해 모든 경로를 하드 코딩해야합니다. –

9

, 나는 다음 두 스크립트를 사용하여 비열한 솔루션을 함께했다

var fs = require("fs"); 
try 
{ 
    fs.mkdirSync("./app/node_modules/"); 
} 
catch(e) 
{ 
} 

try 
{ 
    if(process.platform.indexOf("win32") !== -1) 
    { 
     fs.symlinkSync("./app/node_modules/","./node_modules/","junction"); 
    } 
    else 
    { 
     fs.symlinkSync("./app/node_modules/","./node_modules","dir"); 
    } 
} 
catch(e){} 

postinstall.js

var fs = require("fs"); 
try 
{ 
    if(process.platform.indexOf("win32") !== -1) 
    { 
     fs.unlinkSync("./node_modules/"); 
    } 
    else 
    { 
     fs.unlinkSync("./node_modules"); 
    } 
} 
catch(e){} 

당신이 scripts 옵션에 추가하여 package.json 파일에서 사용하기 만 :

"scripts": { 
    "preinstall": "node preinstall.js", 
    "postinstall": "node postinstall.js" 
}, 

그래서 큰 질문은 : 그것은 무엇을합니까?

  1. 글쎄, 당신은 당신이 원하는 하위 폴더에 node_modules를 생성 npm installpreinstall.js 스크립트 화재를 호출합니다. 그런 다음 node_modules에서 또는 shortcut을 생성합니다 (npmnode_modules입니다).

  2. 그런 다음 npm은 모든 종속성을 설치합니다.

  3. 마지막으로 일단 모든 종속성이 설치되면 을 제거하는 postinstall.js 스크립트가 실행됩니다!

필요한 모든 기능을 갖춘 편리한 gist입니다.

+1

방금 ​​symlink 아이디어를 사용하여 저의 유익한 시간을 저의 사용 사례와 함께 저장했습니다 (많은 프로젝트에서 동일한 모듈을 사용하므로 전체 node_modules 디렉토리를 연결하는 것이 매력처럼 작동합니다). –

+0

절대적으로 똑똑! –

+0

이것은 node_modules에 유용하지만, 이제는 gulpfile.js가 postinstall.js를 실행하지 않아도 심볼릭 링크를 유지하지 않으면 내 gulpfile.js에 로컬 ulp가 설치되어 있지 않다고 불평합니다. gulpfile.js를이 시나리오에서 실행하도록 할 수 있습니까? –