node_modules 아래에서 모든 모듈을 빌드 해제하기 위해 npm을 얻는 방법이 있습니까? npm rebuild와 같은 것이 모든 빌드 아티팩트를 제거하지만 다시 빌드하지는 않습니까?
shrinkwrap
( npmjs.org/doc/shrinkwrap.html 참조 ) 최상위 수준 대신 모든 종속성 버전을 잠글 수 있습니다.
node_modules 아래에서 모든 모듈을 빌드 해제하기 위해 npm을 얻는 방법이 있습니까? npm rebuild와 같은 것이 모든 빌드 아티팩트를 제거하지만 다시 빌드하지는 않습니까?
shrinkwrap
( npmjs.org/doc/shrinkwrap.html 참조 ) 최상위 수준 대신 모든 종속성 버전을 잠글 수 있습니다.
답변:
node_module 디렉토리를 삭제할 수 있습니다
rm -rf node_modules/
package.json
:에 추가했다 "clean": "rm -rf node_modules", "reinstall": "npm run clean && npm install", "rebuild": "npm run clean && npm install && npm run build",
. 잘 작동하는 것 같습니다.
이것을 package.json에 추가했습니다.
"build": "npm build",
"clean": "rm -rf node_modules",
"reinstall": "npm run clean && npm install",
"rebuild": "npm run clean && npm install && npm run build",
잘 작동하는 것 같습니다.
clean
package.json에 정의되어야합니다!
tarball 패키지를 다운로드하여 npm 캐시 디렉토리에 압축 해제하는 'npm cache'명령을 활용할 수 있습니다.
그런 다음 소스를 복사 할 수 있습니다.
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 %s@%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());
npm install
합니까?
한마디 없이 .
아직 두 개는 아닙니다 .
그러나 --no-build
플래그가 npm install
빌드하지 않고 설치를 수행해야 한다는 공개적인 문제가 있습니다.이 문제는 요청하는 것을 수행하는 데 사용될 수 있습니다.
이 공개 된 문제를 참조하십시오 .
이 작업에는 실제로 특별한 명령이 있습니다
npm ci
node_modules
디렉토리 를 삭제 하고 package-lock.json
파일 과 관련하여 패키지를 설치 합니다
자세한 정보 : https://docs.npmjs.com/cli/ci.html