NPM清洁模块

Dav*_*sey 131 node.js npm

有没有办法让npm取消建立node_modules下的所有模块?像npm rebuild那样删除所有构建工件但不重建它们?

Cha*_*les 144

您只需删除node_module目录即可

rm -rf node_modules/
Run Code Online (Sandbox Code Playgroud)

  • 这将删除node_modules的源以及编译的输出,因此不回答问题. (14认同)
  • 我把它添加到我的`package.json`:``clean':"rm -rf node_modules","重新安装":"npm run clean && npm install","rebuild":"npm run clean && npm install && npm run打造"`.似乎运作良好. (10认同)
  • 对于windows> rd node_modules/s (3认同)
  • @Lucas你应该发一个答案,因为它是最合适的答案 (2认同)

FDi*_*isk 68

这项工作实际上有特殊的命令

npm ci
Run Code Online (Sandbox Code Playgroud)

它将删除node_modules目录并根据您的package-lock.json文件安装软件包

更多信息:https : //docs.npmjs.com/cli/ci.html

  • 实际上,如果您与其他团队成员合作并且他们更新了一些依赖项,您应该始终执行“npm ci”而不仅仅是“npm i”。`npm i` 也会更新锁定文件的主要原因,这可能是您不想做的。 (3认同)

Luc*_*cas 38

我把它添加到我的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",
Run Code Online (Sandbox Code Playgroud)

似乎运作良好.

  • @Ciastopiekarz吗?这就是我上面的回答? (14认同)
  • 请注意,您的“重新安装”现在是内置命令:“npm ci” (3认同)
  • `clean` 必须在 package.json 中定义! (2认同)
  • 如果是基于 Linux 的机器,则使用“rm -rf node_modules”;如果是 Windows 机器,则使用“rmdir /s /q node_modules” (2认同)
  • 要使用它们,您不能调用“npm clean”,因为 clean 不是 npm 上可接受的名称之一。您需要执行“npm run clean”。 (2认同)

jec*_*kep 16

试试 https://github.com/voidcosmos/npkill

npx npkill
Run Code Online (Sandbox Code Playgroud)

它将找到所有 node_modules 并让您删除它们。

杀戮

  • @lww https://github.com/vvo/gifify (2认同)

小智 12

npm ci适用于这种情况,但仅当您的package.jsonpackage-lock.json同步时,如果您一直致力于快速解决冲突或通过删除目录/符号链接在目录级别进行更新,则情况可能并不总是如此。这个问题的全面答案是这样的。

  1. 编辑package.json您想要的内容并删除您不需要的内容。
  2. 生成package-lock.json这样的,npm install --package-lock-only
  3. 跑步npm ci。这应该删除所有工件并且不应该重建它们。


the*_*cko 7

您可以利用'npm cache'命令下载软件包tarball并将其解压缩到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());
Run Code Online (Sandbox Code Playgroud)

  • 我觉得非常奇怪的是,npm实际推荐的这样一个基本功能需要一个黑客来实现.其他人都做了什么?只是忽略推荐并使用`npm install`? (12认同)

qub*_*yte 5

一句话没有

二,没有

但是,--no-build标记在npm install不进行构建的情况下执行安装存在一个未解决的问题,该问题可用于完成您所要求的操作。

看到这个未解决的问题


Dan*_*eón 5

对于windows环境:

"scripts": {
    "clean": "rmdir /s /q node_modules",
    ...
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我在 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",
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果你想要的clean话,你可以使用这个rimraf node_modules