programing

npm으로 클린 설치(node_modules 삭제 및 설치)를 수행하려면 어떻게 해야 합니까?

skycolor 2023. 6. 6. 08:07
반응형

npm으로 클린 설치(node_modules 삭제 및 설치)를 수행하려면 어떻게 해야 합니까?

node_modules 아래에 있는 모든 모듈의 빌드를 취소하도록 npm을 얻는 방법이 있습니까?모든 빌드 아티팩트를 제거하지만 재구축하지 않는 npm 재구축과 같은 것입니까?

node_module 디렉토리를 삭제하면 됩니다.

rm -rf node_modules/

실제로 이 작업에 대한 특수 명령이 있습니다.

npm ci

삭됩다니가 됩니다.node_modules 및 패키지를 합니다.package-lock.json

많은 정보: https://docs.npmjs.com/cli/ci.html

나는 이것을 내 패키지에 추가했습니다.json:

"build": "npm build",
"clean": "rm -rf node_modules", 
"reinstall": "npm run clean && npm install", 
"rebuild": "npm run clean && npm install && npm run build",

잘 작동하는 것 같습니다.

https://github.com/voidcosmos/npkill 을 사용해 보십시오.

npx npkill

모든 node_dll을 찾아서 제거할 수 있습니다.

npkill

패키지 tarball을 다운로드하여 npm cache 디렉토리에 압축을 푸는 'npm cache' 명령을 사용할 수 있습니다.

그런 다음 원본을 복사할 수 있습니다.

https://groups.google.com/forum/ ?에서 groups=#!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());

한마디로 아니오.

둘로, 아직.

하지만, 아직 해결되지 않은 문제가 있습니다.--no-build에 깃발을 내미는.npm install건물 없이 설치를 수행할 수 있습니다. 요청한 작업에 사용할 수 있습니다.

미해결 문제를 참조하십시오.

npm ci이 시나리오에서는 작동하지만 다음과 같은 경우에만package.json그리고.package-lock.json동기화되어 있습니다. 이는 충돌을 신속하게 해결하기 위해 작업 중이거나 디렉터리/디렉토리 링크를 제거하여 디렉터리 수준에서 업데이트하는 경우에는 항상 그렇지 않을 수 있습니다.질문에 대한 포괄적인 대답은 다음과 같습니다.

  1. 을 합니다.package.json원하는 것은 무엇이든 사용하고 필요하지 않은 것은 제거합니다.
  2. 「 」를 합니다.package-lock.json 이처럼것.npm install --package-lock-only
  3. 려달을 합니다.npm ci이렇게 하면 모든 아티팩트가 제거되고 재구성되지 않습니다.

윈도우즈 환경의 경우:

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

나는 패키지 안에 몇 줄을 추가했습니다.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",
  ...
}

원하신다면clean당신만이 이것을 사용할 수 있습니다.rimraf node_modules.

npm ci

FDisk에서 언급한 대로 사용할 수 있습니다.npm ci거할을 node modules 다시 합니다. npm 파일 이름은 다음과 같습니다.

npm prune

또다음사수있다습니도용할을는다있을 사용할 수도 .npm prune패키지 내부에 정의되지 않은 node_proxy 폴더 내에 설치된 외부 패키지를 제거합니다.제이손


참조:

나는 이것을 내 소포 안에서 했습니다.제이손

"scripts": {
"clean": "rm -rf ./node_modules package-lock.json .cache dist && npm i",
}

언급URL : https://stackoverflow.com/questions/11351784/how-do-i-do-a-clean-install-delete-node-modules-and-install-with-npm

반응형