有沒有辦法讓npm建立node_modules下的所有模塊?像npm重建,刪除所有構建工件,但不重建它們?NPM清潔模塊
Q
NPM清潔模塊
77
A
回答
103
7
你可以把它下載軟件包壓縮包然後解壓縮到故宮緩存目錄中的「故宮緩存」命令的優勢。
源可以再被複制。
運用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 %[email protected]%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());
+11
我覺得很奇怪,這樣一個基本的功能,實際上是由npm推薦的,需要黑客來實現。其他人做什麼?只要忽略建議並使用'npm install'? – VitalyB 2014-04-20 08:47:26
5
相關問題
- 1. Zorba與整潔的模塊
- 2. npm安裝分模塊git子模塊
- 3. NPM:更新模塊內的模塊
- 4. 整潔,清潔訪問SKNodes
- 5. 需要從NPM緩存NPM模塊
- 6. [R串清潔
- 7. 清潔django user.username
- 8. CSS清潔器
- 9. 清潔RandomAccessFile的
- 10. Laravel的工廠模式清潔代碼
- 11. Django覆蓋模型清潔()vs保存()
- 12. RelatedObjectDoesNotExist - 在模型的清潔功能
- 13. 如何webpack npm模塊?
- 14. 利用異步NPM模塊
- 15. 使用NPM模塊registerTask
- 16. 使用NPM模塊失敗
- 17. NPM模塊安裝錯誤
- 18. npm找不到模塊'minimatch'
- 19. npm模塊package.json損壞
- 20. NPM:找不到模塊'bcrypt'
- 21. 安裝NPM模塊火炮
- 22. Jira清潔責任
- 23. 清潔從應用
- 24. 如何清潔sys.conversation_endpoints
- 25. Django表單清潔
- 26. 清潔長方形
- 27. 清潔URLS /的.htaccess
- 28. 清潔PHP代碼
- 29. 清潔URL htaccess的 -
- 30. 在清潔的數據中沒有可用的清潔數據在django中形式的清潔方法
你能否詳細說明爲什麼你需要這樣做? – 2012-07-05 20:08:02
以爲你永遠不會問。我一直在按照http://www.mikealrogers.com/posts/nodemodules-in-git.html中的建議將我的node_modules目錄轉換爲git。當我添加一個新模塊或更新當前模塊時,我最終將在git中創建構件,而這些構件不應該在那裏並且必須清理它們。我想如果我能先清理它們,那麼這個過程會更順利一點。 – 2012-07-05 20:24:20
一個簡單的提示:現在NPM支持「shrinkwrap」(請參閱http://npmjs.org/doc/shrinkwrap.html),您可以鎖定所有依賴項的版本(而不僅僅是頂級版本)。 – 2012-07-05 22:39:30