自定义命令,通过node脚本,生成组件模版

组内有组件库,在开发组件的过程中,发现大家在创建新组件的时候,都是cv之前的组件,然后再手动修改文件,觉得非常麻烦,所以就自己写了个node脚本,完成模版组件的生成。没有什么相关经验,所以基本是采用原生node来处理的,一边看文档,一边尝试,开发耗时3h。

涉及文件夹的创建,目录的获取,文件的复制及内容重写等,有意见欢迎指正呦~~~

小白可以瞅瞅,大佬绕道走哈

  1. 首先创建模版文件夹结构如下图(自己根据具体需求创建模版就行)

  1. 创建create.js文件后,在package.json中加入自定义命令,node执行该文件

  1. create.js文件的内容如下所示

const inquirer = require('inquirer')
const path = require('path')
const fs = require('fs')
let answers_data = ''
const toggle = str => {
  let arr = str.split('-')
  let resStr = arr.reduce(function (prev, cur) {
    let str = prev + cur.slice(0, 1).toUpperCase() + cur.slice(1)
    return str
  }, '')
  return resStr
}

const copy = (source, target) => {
  // 读取目录下的文件,返回文件名及文件类型{name: 'xxx.txt, [Symbol(type)]: 1 }
  const sourceFile = fs.readdirSync(source, { withFileTypes: true })
  for (const file of sourceFile) {
    // 源文件 地址+文件名
    const srcFile = path.resolve(source, file.name)
    // 目标文件
    const tagFile = path.resolve(target, file.name)
    if (file.isDirectory() && !fs.existsSync(tagFile)) {
      fs.mkdirSync(tagFile, err => console.log(err))
      copy(srcFile, tagFile)
    } else if (file.isDirectory() && fs.existsSync(tagFile)) {
      // 文件是目录且已存在
      copy(srcFile, tagFile)
    }
    // fs.constants.COPYFILE_EXC 如果存在,如果目标路径已存在,则复制失败并出现错误
    !file.isDirectory() && fs.copyFileSync(srcFile, tagFile, fs.constants.COPYFILE_EXCL)
    if (path.basename(tagFile, '.json') === 'package' || path.basename(tagFile, '.js') === 'index') {
      fs.readFile(tagFile, 'utf8', (err, data) => {
        if (err) throw err
        data = data.replace('__name__', answers_data.name)
        data = data.replace('__description__', answers_data.description)
        data = data.replace(/__cname__/g, answers_data.cname)
        data = data.replace(/__componets__/g, toggle(answers_data.name))
        fs.writeFileSync(tagFile, data, 'utf8', () => {})
      })
    }
  }
}

inquirer
  .prompt([
    {
      type: 'input', //type: input, number, confirm, list, checkbox ...
      name: 'name', // key 名
      message: '请输入组件名', // 提示信息
      validate(input) {
        if (!input) {
          return '看这里!!!组件必须命名哦'
        }
        let path = /^[A-Za-z][A-Za-z]*(?:-[A-Za-z]+)*$/
        if (!path.test(input)) {
          return '组件名规定仅支持 字母&下划线,且需以字母开头/结尾'
        }
        return true
      },
    },
    {
      type: 'input', //type: input, number, confirm, list, checkbox ...
      name: 'cname', // key 名
      message: '请输入组件中文名', // 提示信息
      default: '默认组件名', // 默认值
    },
    {
      type: 'input', //type: input, number, confirm, list, checkbox ...
      name: 'description', // key 名
      message: '你对组件的描述', // 提示信息
      default: '业务组件', // 默认值
    },
  ])
  .then(answers => {
    answers_data = answers
    // 模版文件目录
    // process.cwd() 对应控制台所在目录
    const destUrl = path.join(process.cwd(), 'templates')
    let cwdUrl = path.join(process.cwd(), 'packages')
    // 判断是否已存在同名组件
    fs.readdir(cwdUrl, (err, data) => {
      if (err) throw err
      if (data.includes(answers.name)) {
        console.error('已经存在同名组件,请重新命名哦')
      } else {
        // 生成文件目录
        cwdUrl = path.resolve(cwdUrl, answers.name)
        fs.mkdirSync(cwdUrl)
        copy(destUrl, cwdUrl)
      }
    })
  })

在 Python 中,可以使用 statsmodels 模块中的 OLS 类来进行OLS回归模型的拟合和预测。下面是一个简单的示例代码: ```python import numpy as np import pandas as pd import statsmodels.api as sm # 生成随机数据 np.random.seed(123) X = np.random.rand(100) Y = 2*X + 0.5 + np.random.normal(0, 0.1, 100) # 将数据存放在DataFrame对象中 data = pd.DataFrame({'X': X, 'Y': Y}) # 添加截距项 data = sm.add_constant(data) # 拟合OLS回归模型 model = sm.OLS(data['Y'], data[['const', 'X']]) result = model.fit() # 输出回归结果 print(result.summary()) ``` 在上面的代码中,我们首先生成了一个简单的随机数据集,其中 X 是自变量,Y 是因变量。然后,我们将数据存放在了一个 pandas 的 DataFrame 对象中,并使用 sm.add_constant() 函数添加了截距项。接着,我们使用 sm.OLS() 函数拟合了OLS回归模型,并将结果保存在了 result 变量中。最后,我们使用 result.summary() 方法输出了回归结果的详细信息。 需要注意的是,在使用 statsmodels 进行OLS回归模型拟合时,需要显式地添加截距项,否则结果会有偏差。此外,我们还可以使用 result.predict() 方法来进行预测,即: ```python # 进行预测 new_data = pd.DataFrame({'X': [0.1, 0.2, 0.3]}) new_data = sm.add_constant(new_data) prediction = result.predict(new_data) # 输出预测结果 print(prediction) ``` 在上面的代码中,我们首先生成了一个新的数据集 new_data,然后使用 result.predict() 方法对其进行预测,并将结果保存在了 prediction 变量中。最后,我们使用 print() 函数输出了预测结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值