UNPKG

@neosjs/cli

Version:

Neos(奈欧斯)是一个帮助开发者快速地创建 Vue3 应用并自动配置项目编译的脚手架

3 lines 5.82 kB
"use strict";function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,_toPropertyKey(c.key),c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),Object.defineProperty(a,"prototype",{writable:!1}),a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==typeof b?b:b+""}function _toPrimitive(a,b){if("object"!=typeof a||null===a)return a;var c=a[Symbol.toPrimitive];if(c!==void 0){var d=c.call(a,b||"default");if("object"!=typeof d)return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}const path=require("path"),chalk=require("chalk"),execa=require("execa"),install=require("./install"),fileServer=require("./fileServer"),{logWithSpinner,stopSpinner}=require("../utils/spinner"),{log,warn}=require("../utils/logger"),{renderTemplate}=require("../utils/renderTemplate"),{getCommand}=require("../utils/getCommand"),{packageManager}=require("../utils/packageManager"),{hasGit,hasPnpmVersionOrLater}=require("../utils/env"),{gradientSucceessMsg,defaultSuccessMsg}=require("../utils/banner");let Creator=/*#__PURE__*/function(){function a(b,c){_classCallCheck(this,a),this.name=b,this.context=c,this.run=this.run.bind(this),this.templateRoot=path.resolve(__dirname,"./","template"),this.packageManager=packageManager()}return _createClass(a,[{key:"render",value:function render(a){const b=path.resolve(this.templateRoot,a);renderTemplate(b,this.context)}},{key:"create",value:async function create(a,b){const{run:c,name:d,context:e}=this;log(),logWithSpinner("\u2728",`项目创建在 ${chalk.yellow(e)} 目录中`),stopSpinner(),log(),logWithSpinner("\uD83D\uDE80 \u521B\u5EFA\u9879\u76EE\u6587\u4EF6");const f=await fileServer.read(`${this.templateRoot}/base`,{list:["README.md","package.json","index.html","src/main.ts","src/App.vue","build/vite/plugins/index.ts"],options:{projectName:d,userAnswer:b,packageManager:this.packageManager}});fileServer.write(e,f),stopSpinner(),logWithSpinner("\uD83D\uDEE0 \u751F\u6210\u9879\u76EE\u4F9D\u8D56"),b.needsRouter&&this.render(`config/router`),b.needsPinia&&this.render(`config/pinia`),b.needsRequest&&this.render(`config/request`),b.needsUnocss&&this.render(`config/unocss`),stopSpinner(),logWithSpinner("\u2699\uFE0F \u751F\u6210\u9879\u76EE\u914D\u7F6E"),this.render(`config/vscode`),this.render(`config/typescript`),this.render(`config/eslint`),this.render(`config/prettier`),b.needsAutoImport&&this.render(`config/auto-import`),b.needsPwa&&this.render(`config/pwa`),this.render("tsconfig/base"),b.needsVitest&&this.render("tsconfig/vitest"),b.needsMock&&this.render("config/mock"),"h5"===b.template&&this.render(`config/v-console`),stopSpinner(),logWithSpinner("\uD83D\uDCD4 \u914D\u7F6E.npmrc");let g="registry=https://registry.npmmirror.com\nstrict-peer-dependencies=false\n";"pnpm"===packageManager()&&(g+=hasPnpmVersionOrLater("4.0.0")?"shamefully-hoist=true\n":"shamefully-flatten=true\n"),await fileServer.writeFileTree(e,{".npmrc":g}),stopSpinner();const h=this.shouldInitGit(a,b);h&&(logWithSpinner("\u2693\uFE0F \u521D\u59CB\u5316git\u5B58\u50A8\u5E93"),this.render(`config/husky`),await c("git init"),stopSpinner(),logWithSpinner("\uD83D\uDD13 \u8BBE\u7F6Egit\u94A9\u5B50\u6743\u9650"),this.run("chmod",["+x",".husky/commit-msg"]),this.run("chmod",["+x",".husky/pre-commit"]),stopSpinner()),logWithSpinner("\uD83D\uDCE6 \u5B89\u88C5\u4F9D\u8D56\u6587\u4EF6"),await install(e),stopSpinner();let i=!1;if(h){await c("git add -A");const b="string"==typeof a.git?a.git:"init";try{await c("git",["commit","-m",b,"--no-verify"])}catch(a){i=!0}}i&&warn("\u7531\u4E8Egit\u914D\u7F6E\u4E2D\u7F3A\u5C11\u7528\u6237\u540D\u548C\u7535\u5B50\u90AE\u4EF6\uFF0C\u8DF3\u8FC7\u4E86git\u63D0\u4EA4.\n\u60A8\u9700\u8981\u81EA\u5DF1\u6267\u884C\u6700\u521D\u7684\u63D0\u4EA4.\n"),log(),log(`🎉 创建项目 ${chalk.bold(chalk.green(d))} 成功`),process.stdout.isTTY&&8<process.stdout.getColorDepth()?log(`👉 ${gradientSucceessMsg} 👏`):log(`👉 ${defaultSuccessMsg} 👏`),log(),log(`${e===process.cwd()?"":chalk.bold(chalk.green(` ${chalk.gray("$")} cd ${d}`))+`${" ".repeat(27-d.length)}${chalk.gray("\u8FDB\u5165\u9879\u76EE")}`}`),log(`${chalk.cyan(` ${chalk.gray("$")} ${chalk.bold(chalk.green(getCommand(this.packageManager,"lint:eslint")))}`)+`${" ".repeat(18-this.packageManager.length)}${chalk.gray("\u68C0\u67E5\u4EE3\u7801\u683C\u5F0F")}`}`),log(`${chalk.cyan(` ${chalk.gray("$")} ${chalk.bold(chalk.green(getCommand(this.packageManager,"lint:prettier")))}`)+`${" ".repeat(16-this.packageManager.length)}${chalk.gray("\u683C\u5F0F\u5316\u4EE3\u7801")}`}`),log(`${chalk.cyan(` ${chalk.gray("$")} ${chalk.bold(chalk.green(getCommand(this.packageManager,"dev")))+`${" ".repeat(26-this.packageManager.length)}${chalk.gray("\u542F\u52A8\u5F00\u53D1\u670D\u52A1\u5668")}`}`)}`),log(`${chalk.cyan(` ${chalk.gray("$")} ${chalk.bold(chalk.green(getCommand(this.packageManager,"build:test")))+`${" ".repeat(19-this.packageManager.length)}${chalk.gray("\u7F16\u8BD1\u6D4B\u8BD5\u73AF\u5883")}`}`)}`),log(`${chalk.cyan(` ${chalk.gray("$")} ${chalk.bold(chalk.green(getCommand(this.packageManager,"build:prod")))+`${" ".repeat(19-this.packageManager.length)}${chalk.gray("\u7F16\u8BD1\u751F\u6210\u73AF\u5883")}`}`)}`),log()}},{key:"run",value:function run(a,b){return b||([a,...b]=a.split(/\s+/)),execa(a,b,{cwd:this.context})}},{key:"shouldInitGit",value:function shouldInitGit(a,b){return!!hasGit()&&(!!(a.forceGit||b.git)||!1!==a.git&&"false"!==a.git&&void 0);// --git // --no-git }}]),a}();module.exports=Creator;