UNPKG

hcy-vue-cli

Version:

An easy to use vue-cli

117 lines (96 loc) 3.02 kB
const fs = require("fs-extra") const path = require("path") function writeFileTree(dir, files) { Object.keys(files).forEach((name) => { const filePath = path.join(dir, name) fs.ensureDirSync(path.dirname(filePath)) fs.writeFileSync(filePath, files[name]) }) } function stringifyJS(value) { const { stringify } = require("javascript-stringify") // 2个空格格式化显示 return stringify(value, null, 2) } function extractCallDir() { // extract api.render() callsite file location using error stack const obj = {} Error.captureStackTrace(obj) const callSite = obj.stack.split("\n")[3] // the regexp for the stack when called inside a named function const namedStackRegExp = /\s\((.*):\d+:\d+\)$/ // the regexp for the stack when called inside an anonymous const anonymousStackRegExp = /at (.*):\d+:\d+$/ let matchResult = callSite.match(namedStackRegExp) if (!matchResult) { matchResult = callSite.match(anonymousStackRegExp) } const fileName = matchResult[1] return path.dirname(fileName) } function mergeDeps(sourceDeps, depsToInject) { const result = Object.assign({}, sourceDeps) for (const depName in depsToInject) { const sourceRange = sourceDeps[depName] const injectingRange = depsToInject[depName] if (sourceRange === injectingRange) continue result[depName] = injectingRange } return result } const isObject = (val) => val && typeof val === "object" function sortObject(obj, keyOrder, dontSortByUnicode) { if (!obj) return const res = {} if (keyOrder) { keyOrder.forEach((key) => { if (Object.prototype.hasOwnProperty.call(obj, key)) { res[key] = obj[key] delete obj[key] } }) } const keys = Object.keys(obj) !dontSortByUnicode && keys.sort() keys.forEach((key) => { res[key] = obj[key] }) return res } function printScripts(pkg) { const descriptions = { build: "Compiles and minifies for production", serve: "Compiles and hot-reloads for development", lint: "Lints and fixes files", "test:e2e": "Run your end-to-end tests", "test:unit": "Run your unit tests", } return Object.keys(pkg.scripts || {}) .map((key) => { if (!descriptions[key]) return "" return [`\n### ${descriptions[key]}`, "```", `npm run ${key}`, "```", ""].join("\n") }) .join("") } function generateReadme(pkg) { return [ `# ${pkg.name}\n`, "## Project setup", "```", `npm install`, "```", printScripts(pkg), "### Customize configuration", "See [Configuration Reference](https://cli.vuejs.org/config/).", "", ].join("\n") } module.exports = { writeFileTree, stringifyJS, extractCallDir, mergeDeps, isObject, sortObject, generateReadme, }