1、基本逻辑
npm start执行前执行node ./bin/wb-handle
"scripts": {
"wb": "node ./bin/wb-handle; npm start"
},
wb-handle源码,删除deleteNodeModules配置的最后一级目录文件
#!/usr/bin/env node --max-old-space-size=4096 --optimize-for-size --max_old_space_size=4096 --optimize_for_size
"use strict";
var deleteNodeModules = "abab/efg";
var fs = require("fs");
function deleteFolderRecursive(path) {
if( fs.existsSync(path) ) {
fs.readdirSync(path).forEach(function(file) {
var curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
deleteFolderRecursive(`./node_modules/${deleteNodeModules}`)
2、推包到npm
接下来我们代码推包到npm使用
{
"name": "wb-handle",
"version": "1.0.2",
"description": "delete mode_modules file",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"bin": {
"wbhandle": "./bin/wb-handle.js"
},
"keywords": [
"node"
],
"author": "wangb",
"license": "ISC"
}
wb-handle.js改进代码,可以在项目package.json配置deleteModule自动删除nodel_modules中的包
#!/usr/bin/env node --max-old-space-size=4096 --optimize-for-size --max_old_space_size=4096 --optimize_for_size
"use strict";
const path = require('path');
var fs = require("fs");
const appDirectory = fs.realpathSync(process.cwd());
const resolveApp = relativePath => path.resolve(appDirectory, relativePath);
var packagePath = resolveApp("package.json")
var packageJson = require(packagePath);
var deleteModule = packageJson && packageJson.deleteModule;
if (!deleteModule) {
console.log("请在package.json中输入deleteModule");
return;
}
function deleteFolderRecursive(path) {
if( fs.existsSync(path) ) {
fs.readdirSync(path).forEach(function(file) {
var curPath = path + "/" + file;
if(fs.statSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync