npm이 node_modules 아래의 모든 모듈을 풀어 버릴 수있는 방법이 있습니까? npm 재 구축과 같은 것이 모든 빌드 아티팩트를 제거하지만 다시 빌드하지는 않습니까?NPM 클린 모듈
77
A
답변
103
당신은 당신은 패키지 타르볼을 다운로드하고 NPM 캐시 디렉토리로 압축을 풉니 다 'NPM 캐시'명령을 활용할 수있는 node_module 디렉토리를
rm -rf node_modules/
7
을 삭제할 수 있습니다.
소스
다음에 복사 할 수 있습니다. https://groups.google.com/forum/?fromgroups=#!topic/npm-/mwLuZZkHkfU에서 수집 한 아이디어를 사용나는 다음과 같은 노드 스크립트를 내놓았다. 보증 없음, YMMV 등.
var fs = require('fs'),
path = require('path'),
exec = require('child_process').exec,
util = require('util');
var packageFileName = 'package.json';
var modulesDirName = 'node_modules';
var cacheDirectory = process.cwd();
var npmCacheAddMask = 'npm cache add %[email protected]%s; echo %s';
var sourceDirMask = '%s/%s/%s/package';
var targetDirMask = '%s/node_modules/%s';
function deleteFolder(folder) {
if (fs.existsSync(folder)) {
var files = fs.readdirSync(folder);
files.forEach(function(file) {
file = folder + "/" + file;
if (fs.lstatSync(file).isDirectory()) {
deleteFolder(file);
} else {
fs.unlinkSync(file);
}
});
fs.rmdirSync(folder);
}
}
function downloadSource(folder) {
var packageFile = path.join(folder, packageFileName);
if (fs.existsSync(packageFile)) {
var data = fs.readFileSync(packageFile);
var package = JSON.parse(data);
function getVersion(data) {
var version = data.match(/-([^-]+)\.tgz/);
return version[1];
}
var callback = function(error, stdout, stderr) {
var dependency = stdout.trim();
var version = getVersion(stderr);
var sourceDir = util.format(sourceDirMask, cacheDirectory, dependency, version);
var targetDir = util.format(targetDirMask, folder, dependency);
var modulesDir = folder + '/' + modulesDirName;
if (!fs.existsSync(modulesDir)) {
fs.mkdirSync(modulesDir);
}
fs.renameSync(sourceDir, targetDir);
deleteFolder(cacheDirectory + '/' + dependency);
downloadSource(targetDir);
};
for (dependency in package.dependencies) {
var version = package.dependencies[dependency];
exec(util.format(npmCacheAddMask, dependency, version, dependency), callback);
}
}
}
if (!fs.existsSync(path.join(process.cwd(), packageFileName))) {
console.log(util.format("Unable to find file '%s'.", packageFileName));
process.exit();
}
deleteFolder(path.join(process.cwd(), modulesDirName));
process.env.npm_config_cache = cacheDirectory;
downloadSource(process.cwd());
+11
실제로 npm에서 권장하는 이러한 기본 기능을 달성하려면 해킹이 필요하다는 사실을 알게되었습니다. 다른 사람들은 무엇을합니까? 그냥 추천을 무시하고'npm install'을 사용 하시겠습니까? – VitalyB
5
단어 아니요.
2 가지로, 은 아직입니다.
npm install
에 --no-build
플래그로 공개되지 않아서 건물을 설치하지 않고 설치할 수 있습니다. 요청한 작업을 수행하는 데 사용할 수 있습니다.
this open issue을 참조하십시오.
관련 문제
- 1. npm 모듈 테스트
- 2. NodeJS는 NPM 저장소에 기존의 모듈을 통해 모듈
- 3. NPM
- 4. 실행중인 node.js 응용 프로그램에서 사용되는 NPM 모듈 결정
- 5. npm 'connect'버전
- 6. 문제는 NPM
- 7. 상속 형식의 클린 메서드
- 8. 클린 셧다운이있는 Ruby 데몬
- 9. 클린 URL의 PHP 물음표
- 10. Android 클린 애플리케이션 데이터
- 11. 메이븐 클린 속도 향상
- 12. Android 클린 기기 캐시
- 13. 플래시 빌더 클린 문제
- 14. PyroCMS 클린 URL 문제
- 15. 데이터베이스 빌드/클린 시간
- 16. C++ 클린 포인터 산술
- 17. 소프트웨어 테스팅시의 클린 룸업
- 18. InlineFormset 클린 메서드를 테스트합니다.
- 19. NPM 및 jsdom 오류로드
- 20. npm 패키지 디렉토리를 설정하십시오
- 21. 문제 Mac에서 npm 설치
- 22. npm (SSL없이) 설치
- 23. soundcloud node npm
- 24. npm 설치 오류 ENOTDIR
- 25. 완전히 깨끗한 서버와 NPM
- 26. npm sqlite3 오류를 설치하십시오.
- 27. npm 설치시 coffeescript 컴파일
- 28. npm : 종속성은 어떻게 관리됩니까?
- 29. npm 설치 jquery가 실패합니다.
- 30. Node.js Windows에 모듈 설치
왜 이렇게해야하는지 자세히 설명해 주시겠습니까? –
묻지 않을 줄 알았는데. 나는 http://www.mikealrogers.com/posts/nodemodules-in-git.html에서 권장하는대로 git으로 node_modules 디렉토리를 검사 해왔다. 새 모듈을 추가하거나 현재 모듈을 업데이트하면 git에 빌드 아티팩트가 존재하지 않아야하고 결국 정리해야합니다. 나는 공정을 좀 더 부드럽게 진행할 수 있다고 생각했다. –
한 가지주의 할 점 : NPM이'shrinkwrap'을 지원하기 때문에 (http://npmjs.org/doc/shrinkwrap.html 참조), 상위 레벨의 것들이 아닌 모든 의존성의 버전을 잠글 수 있습니다. –