나는 이것이 오래된 질문이라는 것을 알고 있지만 semver
의 preinstall
스크립트에서 버전 확인을 시도 할 때이 문제가 발생 했습니다 package.json
. 설치된 로컬 모듈에 의존 할 수 없다는 것을 알았으므로 semver
전역 node_modules
폴더 에서 요구하는 데 사용 npm
했습니다 (내가 아는 것처럼).
function requireGlobal(packageName) {
var childProcess = require('child_process');
var path = require('path');
var fs = require('fs');
var globalNodeModules = childProcess.execSync('npm root -g').toString().trim();
var packageDir = path.join(globalNodeModules, packageName);
if (!fs.existsSync(packageDir))
packageDir = path.join(globalNodeModules, 'npm/node_modules', packageName); //find package required by old npm
if (!fs.existsSync(packageDir))
throw new Error('Cannot find global module \'' + packageName + '\'');
var packageMeta = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json')).toString());
var main = path.join(packageDir, packageMeta.main);
return require(main);
}
사용하기 위해 특별한 모듈을 설치할 필요가 없기 때문에이 방법이 마음에 듭니다.
프로젝트 NODE_PATH
를 실행하기 전에 추가 구성 / 설정을 요구하지 않고 다른 사람의 컴퓨터 에서이 작업을 수행하기를 원했기 때문에 다른 사람들이 제안한 솔루션을 사용 하지 않았습니다 npm install
.
이 코딩 방법, 단지 최상위 모듈 (사용하여 설치 찾을 보장 npm install -g ...
) 또는에 필요한 모듈 npm
(로 나열 dependencies
: 여기 https://github.com/npm/npm/blob/master/package.json ). 최신 버전의 NPM을 사용하는 경우 node_modules
폴더에 대한 구조가 더 평평하므로 전세계에 설치된 다른 패키지의 종속성을 찾을 수 있습니다.
이것이 누군가에게 유용하기를 바랍니다.