const fs = require("fs"); const Path = require("path"); const exec = require("child_process").exec; function changeName(needChangeFiles, callback) { needChangeFiles.map(fileName => { fileName = Path.resolve(fileName); let tmpFileName = `${fileName}-tmp`; let deployFileName = `${fileName}-deploy`; fs.rename(fileName, tmpFileName, function() { fs.rename(deployFileName, fileName, function() { fs.rename(tmpFileName, deployFileName, function() {}); }); }); }); callback && callback(needChangeFiles); } function upProjectVersion(fileName, callback) { let result; let data = fs.readFileSync(fileName, "utf-8"); let jsonObj = JSON.parse(data); let nums = jsonObj.version.split("."); nums[nums.length - 1] = parseInt(nums[nums.length - 1]) + 1; jsonObj.version = nums.join("."); result = JSON.stringify(jsonObj, null, 3); fs.writeFile(fileName, result, function(err) { if (err) { console.log(err); } else { callback && callback(); } }); } function deployProject(callback) { exec("npm publish", function(err, stdout, stderr) { console.log(stdout); console.log("stderr:" + stderr); callback && callback(); }); } const deployType = process.argv[2]; if ("base" === deployType) { console.log("发布项目基础包"); let needChangeFiles = [ "config/dev.env.js", "config/prod.env.js", "src/router/index.js", "mock/serverApi.json", ".npmignore", "package.json" ]; upProjectVersion("./package.json-deploy", function() { changeName(needChangeFiles, function() { deployProject(function() { changeName(needChangeFiles); }); }); }); } else if ("common" === deployType) { upProjectVersion("./package.json", function() { deployProject(function() { console.log("发布成功"); }); }); } else { console.error("发布类型错误"); }