有没有办法让npm取消构建node_modules下的所有模块?类似于npm rebuild,它可以删除所有构建产物但不重新构建它们吗?
你可以直接删除 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"
,看起来工作得很好。 - Lucasrd node_modules /s
。 - Ishara Samantha其实有一个特殊的命令可以完成这项工作
npm ci
它将删除node_modules
目录,并根据您的package-lock.json
文件安装软件包。
npm ci
而不是仅仅运行 npm i
。主要原因是 npm i
也会更新锁定文件,这可能不是你想要的。 - FDisknpm i
。这有点误导人,因为它被称为“clean install”,但并不一定是这样。最好改名为rebase或其他什么更好。如果你还依赖于将项目版本放在package.json中,那么只有在运行npm i
之后,package-lock才会得到更新,尽管这并不是很重要。 - Kris Boyd我将以下内容添加到我的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
! - Ciasto piekarzreinstall
现在是内置命令 npm ci
的别名。 - Silviu Burceanpm ci
可以适用于这种情况,但前提是你的 package.json
和 package-lock.json
文件是同步的。如果你在其中一个文件上进行了处理以快速解决冲突,或者通过移除某些目录/符号链接来更新目录级别,则两个文件可能不会始终保持同步。以下是一个全面的答案。
package.json
,添加所需内容并移除不需要的内容。package-lock.json
: npm install --package-lock-only
npm ci
。这应该会删除所有构件,并且不会重建它们。npm ci --legacy-peer-deps
。 - undefinedvar 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());
针对Windows环境:
"scripts": {
"clean": "rmdir /s /q node_modules",
...
}
我在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",
...
}
如果您只想要“清理(clean)”,可以使用这个命令:rimraf node_modules
。
"clean": "rm -rf node_modules",
- claudiusnpm ci
如FDisk所提到的, 您可以使用npm ci
来删除node modules
文件夹并从头重新安装npm包。
npm prune
另外,您也可以使用npm prune
来删除在node_modules
文件夹中安装的不在package.json
中定义的多余包。
shrinkwrap
(参见http://npmjs.org/doc/shrinkwrap.html),你可以锁定所有依赖项的版本(而不仅仅是顶级依赖项)。 - Michelle Tilleypackages.json
中安装模块(使用npm --save
),并将node_modules
目录放在.gitignore
中(如果使用了Git)。CI不应该拉取你的node_modules,但应该执行npm install
。最后,如果从npm注册表下载太慢,请使用类似sinopia的东西来缓存它。 - Bojan Markovic