Programming

NPM 클린 모듈

procodes 2020. 7. 7. 21:22
반응형

NPM 클린 모듈


node_modules 아래에서 모든 모듈을 빌드 해제하기 위해 npm을 얻는 방법이 있습니까? npm rebuild와 같은 것이 모든 빌드 아티팩트를 제거하지만 다시 빌드하지는 않습니까?


node_module 디렉토리를 삭제할 수 있습니다

rm -rf node_modules/

이것을 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",

잘 작동하는 것 같습니다.


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());

한마디 없이 .

아직 두 개는 아닙니다 .

There is, however, an open issue for a --no-build flag to npm install to perform an installation without building, which could be used to do what you're asking.

See this open issue.


For windows environment:

"scripts": {
    "clean": "rmdir /s /q node_modules",
    ...
}

I have added few lines inside package.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

If you want to clean only you can use this rimraf node_modules.

참고URL : https://stackoverflow.com/questions/11351784/npm-clean-modules

반응형