最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何用类似vue init webpack XXX的命令拉取脚手架创建项目

    正文概述 掘金(Visupervi Reborn)   2021-03-04   545

    1. 事出有因

    因为之前搭建了一套移动端的脚手架并用于众多个项目且落地,所以再后来的项目中,有好多同事为了省事要用这一整套的脚手架的东西,但是我不可能把项目拷给他们。所以把我的脚手架里面所有的项目内容都清空掉,只留下基本的脚手架的内容并创建一个包放在npm中,让他们自己去拉取。

    2. 自定义命令

    首先你要知道npm包为什么能在命令行中输入命令就能执行。其实所谓的npm包就是一个node.js的一个模块包。这个时候你就可以npm init 命令来初始化一个node的模块,这个时候你会发现生成了package.json文件,这里面包含了模块的入口文件,默认应该是index.js,我习惯改成bin.js

    {
      "name": "sg-vue-cli",
      "version": "1.1.2",
      "description": "superGuid mobile cli",
      "main": "bin.js",
      "bin": {
        "superVueCli": "bin.js"
      },
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "Visupervi",
      "license": "ISC",
      "dependencies": {
        "chalk": "latest",
        "commander": "^6.0.0",
        "download-git-repo": "^3.0.2",
        "ora": "^5.0.0"
      }
    }
    

    当然还需要自己的自定义命令,所以添加一个bin字段,这里定义的就是命令的名字,后面是指定该命令执行的文件

    bin.js如下

    #!/usr/bin/env node
    
    /**
     * @Author: visupervi
     * @Date: 2020-08-18 11:21
     * @return:
     * @Description 脚手架文件创建
     */
    
    
    const program = require('commander');//cmd控制台交互
    const ora = require('ora');//进度条
    const chalk = require('chalk');//给提示文案着色
    const download = require('download-git-repo');//拉取github项目
    const fs = require('fs');
    
    
    // 提示样式
    const success = chalk.blueBright;
    const error = chalk.bold.red;
    
    
    const templateUrl = 'direct:https://gitee.com/visupervi/superGuild-vue-cli.git';//github项目地址
    
    
    program.version('1.1.2')
      .option('-i, init [name]', '初始化项目')
      .parse(process.argv);
    
    
    // 拉取项目代码
    
    console.log("program.init",program.init);
    if (program.init && typeof program.init === "string") {
      const spinner = ora('正在拉取模板...').start();//开启进度条
      download(templateUrl, program.init, {clone: true}, function (err) {
        if (!err) {
          spinner.succeed(success('拉取成功'));
          // 更改 package.json 中的 name 和版本号
          changePackage()
        } else {
          console.log(err);
          spinner.fail('拉取失败');
        }
      });
    } else {
      console.error(error('请在init后输入目录名'));
    }
    
    
    // 替换模板package.json文件的name字段
    const changePackage = () => {
      fs.readFile(`${process.cwd()}/${program.init}/package.json`, (err, data) => {
        if (err) throw err;
        let _data = JSON.parse(data.toString());
        _data.name = program.init;
        _data.version = '1.0.0';
        let str = JSON.stringify(_data, null, 4);
        fs.writeFile(`${process.cwd()}/${program.init}/package.json`, str, function (err) {
          if (err) throw err;
        })
      });
    };
    
    

    3. 发布

    首先登陆npm npm login 然后npm publish

    4.使用

    安装:npm i superguid-vue-cli
    创建项目:superguid-vue-cli -i test
    根据脚手架安装依赖:yarn install / yarn install
    运行:yarn run dev / npm run dev


    起源地下载网 » 如何用类似vue init webpack XXX的命令拉取脚手架创建项目

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元