current position:Home>[Architect (Part 20)] self defined template of scaffold and summary of phase I
[Architect (Part 20)] self defined template of scaffold and summary of phase I
2022-04-29 12:08:29【A tailed Warbler】
Form writing habits together ! This is my participation 「 Nuggets day new plan · 4 Yuegengwen challenge 」 Of the 21 God , Click to see the event details .
Custom project template development
stay hzw-cli-dev-template
Under this module , New template hzw-cli-dev-template-custom-vue3
.
modify package.json
, add to main
Field
"main": "index.js"
Copy code
add to index.js
function install(options) {
console.log(options);
}
module.exports = install
Copy code
Publish to npm
Add a new piece of data to the database
Custom template installation logic development
commands\init\lib\index.js
installCustomTemplate
/** * @description: Install custom templates * @param {*} * @return {*} */
async installCustomTemplate() {
// Query the entry file of user-defined template
if (await this.templateNpm.exists()) {
const rootFile = this.templateNpm.getRootFilePath();
if (fs.existsSync(rootFile)) {
// Start executing custom template
const templatePath = path.resolve(this.templateNpm.cacheFilePath, 'template')
const options = {
templateInfo: this.templateInfo,
projectInfo: this.projectInfo,
targetPath: process.cwd(),
sourcePath: templatePath
}
const code = `require("${rootFile}")(${JSON.stringify(options)})`
await execAsync('node', ['-e', code], { stdio: 'inherit', cwd: process.cwd() })
// Custom template installed successfully
}
}
}
Copy code
hzw-cli-dev-template-custom-vue3\index.js
const fse = require("fse")
const inquirer = require('inquirer')
const glob = require('glob')
const ejs = require('ejs')
/** * @description: ejs Template rendering * @param {*} * @return {*} */
async function ejsRender(options) {
return new Promise((resolve, reject) => {
// Traverse the list of files
glob("**", {
cwd: options.targetPath,
nodir: true,
ignore: options.ignore || []
}, (err, files) => {
if (err) {
reject(err)
}
// Use... For the file list ejs Rendering
Promise.all(files.map((file) => {
const filePath = path.join(process.cwd(), file)
return new Promise((resolve1, reject1) => {
ejs.renderFile(filePath, options, {}, (err, res) => {
if (err) {
reject1(err)
}
// Replace the source file with ejs Rendered file
fse.writeFileSync(filePath, res)
resolve1(res)
})
})
}))
.then(() => resolve(files))
.catch((err) => reject(err))
})
})
}
async function install(options) {
const promptArr = []
const descriptPrompt = {
type: 'input',
message: ' Please enter the component description ',
name: 'description',
validate: (a) => {
if (a) {
return true;
}
return ' Component description cannot be empty ';
},
}
promptArr.push(descriptPrompt)
const answer = await inquirer.prompt(promptArr);
options.description = answer.description
// Get the template cache path
// Get the directory where the template is located Get current directory
const { sourcePath, targetPath } = options
try {
// Make sure the directory exists Does not exist, will create
fse.ensureDirSync(sourcePath);
fse.ensureDirSync(targetPath);
// Copy the template to the current directory
fse.copySync(templatePath, targetPath)
// ejs Template rendering
options.ignore = ['node_modules/**', ...options.templateInfo.ignore]
// const ops = { ignore }
await ejsRender(options)
// const { installCommand, startCommand } = this.templateInfo
// Dependent installation
// await this.execCommand(installCommand, ' Dependency installation succeeded ')
// Start command
// await this.execCommand(startCommand, ' The project started successfully ')
} catch (error) {
log.error(error.message)
} finally {
spinner.stop(true)
log.warn(' Template installed successfully ')
}
}
module.exports = install
Copy code
Summary of the first stage
This concludes the first phase of the course . The main content is to develop the function of scaffold creation project , Scaffolding has other functions , I will continue to add in later courses .
Due to their own ability , The first stage of the course plus meals , That is to say nodejs
Related source code analysis , I haven't seen it completely , So after this place has the opportunity or ability , I need to add .
- The fourth chapter of the second week
- Chapter five and chapter seven of the fourth week
- The seventh chapter of the fifth week
- Chapter 7 and Chapter 8 of week 6
In this stage, three code warehouses are generated
hzw-cli-dev
: Scaffold core codehzw-cli-dev-server
: Scaffold service endhzw-cli-dev-template
: The warehouse where the project template is stored
Produce a total of twenty stage notes ( Including this chapter ) I want to be an architect
This shows 17
Because there are three articles that haven't been published yet .
To tell you the truth, I can't see it in the back , But I still insist on reading it , While watching the video , While typing code , While taking notes , It's a little slow .
And here we are B
End developed , Get in touch with some new technology stacks , I hope I can improve my interest , And speed up .
Or that sentence : I wish I can grow into a qualified architect as soon as possible ~
copyright notice
author[A tailed Warbler],Please bring the original link to reprint, thank you.
https://en.qdmana.com/2022/04/202204291208241460.html
The sidebar is recommended
- JavaScript functions -- pre parsing, Iife, advanced functions, recursion
- JavaScript object
- How to introduce element plus gracefully in vue3 project on demand
- Component slot Vue js
- How to write game interface style in HTML
- Ask some front-end questions.
- Information | driverless taxi has come to Beijing. Xiaoma Zhixing has been approved to carry out automatic driving service in Beijing
- [taro react] - H5 route configuration cancels # on the route
- Reverse advanced, using ast technology to restore JavaScript obfuscated code
- JavaScript object
guess what you like
Vue introduces vant / elementul
JavaScript queue“
Vue content summary
vue3. 0
Small tips: detection of JS font loading failure or completion
CSS is a box that has been climbing
Leetcode215 - the kth largest element in the array - quick sort - quick select - template
CSS adds effect to the four corners of div
HTTP error 500.19 internal server error occurred in the integration pageoffice of aspnetcore project,
Front end < TD > what is the word limit of the label
Random recommended
- Construction and development of automatic test platform based on HTTP runner
- Application of RT thread - use RT thread on stm32l051 (v. conclusion of wireless temperature and humidity sensor)
- Expose Dubbo to HTTP service
- Put the front end into the spring cloud project
- Front end learning day 4 - CSS
- Vue URL jump page with parameters
- JavaScript Chapter 13 traversal of arrays and implicit parameters of function methods
- These CSS efficiency improvement skills, you need to know!
- Beijing has opened the pilot of unmanned operation of passenger cars, and the driverless air outlet has arrived
- Test theory series - Test Case elements and design methods Part II
- How to make the peak value of measured output voltage not less than 2V
- Hexo quickly set up its own blog
- Gee synthetic cloudless landsat-8 and sentry-2 data
- Prototype object creation method case JavaScript specific implementation steps
- YAF CLI and HTTP access modes
- Simple HTML + CSS animation web page production DW simple animation web page production
- The correct way for web programmers to make a pink girl series happy birthday blessing web page (HTML + CSS + JS)
- HTML + CSS + JS to make simple animation web pages
- HTML gourmet web page production DW static web page production div + CSS gourmet web page implementation and production
- Programmer 520 Tanabata Valentine's Day confession code HTML + JS + CSS petal photo album web page template programmer confession necessary
- Element notify notification prompt text wrap
- Belkin: it's too early to talk about real wireless space charging
- JavaScript ES6 set (set) type* ω *
- Understand JavaScript function execution process and scope chain
- Java project: nursing home management system (java + springboot + thymeleaf + HTML + JS + MySQL)
- Java project: drug management system (java + springboot + HTML + layui + bootstrap + seals + MySQL)
- An error is reported when installing hexo during hexo deployment. What is the reason and how to solve it (tag git | keyword path)
- [front end basics] Linux command: Project Automation deployment
- Less than 100 or win Porsche, Maserati "special supply" 3.0T technical analysis
- Introduction to basic methods of math built-in objects in JavaScript
- CSS matches the nth element of the parent element
- What is the commercialization process of unmanned robotaxi after China allows driverless steering wheel?
- A lot of trouble, cook also worried: a quarter less than $8 billion
- Ajax realizes no refresh paging (no refresh paging shopping cart source code)
- [flutter topic] 101 what is flutter elements Yyds dry goods inventory
- What is the commercialization process of unmanned robotaxi after China allows driverless steering wheel?
- A lot of trouble, cook also worried: a quarter less than $8 billion
- Element acquisition of data structure c language sequence stack
- Set video label based on Vue
- CSS realizes div width adaptation, and the proportion of height and width is fixed