用node創建自己的腳手架


參考鏈接:https://blog.csdn.net/QQ729533020/article/details/99740477

 

1.為什么要用腳手架?

  腳手架能給我們省很多的事情,比如說vue-cli,只需要幾行命令就能創建一個基礎的vue項目。

2.為什么要自定義腳手架?

  在公司的時候,看到有大佬自定義了一套直接對接公司主項目的腳手架,能夠直接創建一個微項目和公司的主項目進行對接,並且能夠和公司的所有測試環境進行url對接。類似於這種,傳統的腳手架是無法滿足各個公司的內部需求的,所以需要能夠自定制腳手架。

3.如何創建腳手架?

  首先要明白,腳手架是用node搭建的,node中能用的,在腳手架中也能用。

  其次要明白,自定義腳手架之前要明白,定義一個腳手架的目的是什么?--為了能給公用的代碼弄一套標准的模板。

  最后,開始寫代碼(符合純小白操作)。

 

第一步(初始化項目):

  1.下載node;

  2.創建一個新的文件夾(最好路徑全是英文);

  3.cmd進入到文件夾目錄運行:npm init (會讓你錄很多參數,剛開始嘗試的時候就一路回車就完事了,最后會在你的文件夾目錄中生成一個package.json文件,文件內容大概如下)

{
  "name": "cc",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "xcc",
  "license": "ISC"
}

第二步(進入項目):

  1.看到package.json文件中的main參數的值是index.js,也就是項目的起始入口,需要在文件夾中創建一個index.js的文件(這個文件在本文作用不大)

  2.修改package.json的配置參數,重點是bin參數,他的作用是在你的npm的目錄下創建一個指令,能夠在cmd任何地方都執行lq命令,執行lq命令可以執行bin目錄下的index.js腳本,代碼如下:

{
  "name": "cc",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "bin":{
    "lq":"bin/index.js"
    }
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "xcc",
  "license": "ISC"
}

  3.如上我們新增了bin這個參數,有一個指令lq對應的bin目錄下的index.js,所以我們需要新建一個文件夾bin,並且在bin文件夾下新建一個index.js,大致目錄如下:

  

 

 

   4.划重點:index.js的第一行必須加上   #!/usr/bin/env node     否則會報錯,大致意思是用node去運行這個文件吧,不確定我是菜雞。

  

 

  5.配置好上述的我們就運行一下試試看:在cli這個根目錄下面執行npm link 將lq這個指令注冊到npm目錄中去;再在cmd中運行一下lq,會打印出123就算成功了。

  》》》》》》》運行完npm link后,會在你的npm目錄下新增3個文件,一般來說你可以這樣打開npm目錄查看,右擊我的電腦點屬性=》點擊高級系統設置=》點擊環境變量=》點擊path=》找到npm的目錄
  

第三步(自定義配置):

   自定義配置需要用到一些插件,在參考鏈接中那位大佬已經列舉了一些,我就照搬照抄了,但是某些插件的最新版本不能夠require導入,所以注意控制插件的版本,我用的版本如下

    "chalk": "^4.0.0",
    "commander": "^9.0.0",
    "download-git-repo": "^3.0.2",
    "inquirer": "^8.2.1",
    "log-symbols": "^3.0.0",
    "ora": "^5.4.1"

  index.js的內容如下:

#!/usr/bin/env node
const program = require("commander"); //用於捕獲命令
const chalk = require("chalk"); //用於字體加色
const download = require("download-git-repo"); //用於下載git的包
const inquirer = require("inquirer"); //用於與用戶輸入做交互
const ora = require("ora"); //進度顯示
const symbols = require("log-symbols"); //信息前面加✔或✖

console.log(chalk.green("hello,cli!"));
console.log(symbols.success, chalk.green("SUCCESS"));
console.log(symbols.error, chalk.green("ERROR"));
// const proce = ora("正在下載模板")
// //開始下載
// proce.start()
// //下載失敗調用
// proce.fail()
// //下載成功調用
// proce.succeed()

program
  .version(require("../package").version, "-v,--version")
  .command("init <name>")
  .action((name) => {
    inquirer
      .prompt([
        {
          type: "input",
          name: "authore",
          message: "請輸入你的名字",
        },
        {
          type: "input",
          name: "authore1",
          message: "測試",
        },
      ])
      .then((answers) => {
        download(
          "direct:http://......./project-demo.git",
          "ceshi",
          { clone: true },
          function (err) {
            if (err) {
              console.log(err);
            } else {
              console.log(symbols.success, chalk.green("創建項目成功"));
            }
          }
        );
      });
  });

program.parse(process.argv);

  在.then后面寫自定義的邏輯,比如說,微項目的話,在.then中調用接口將主項目的url和子項目的目錄接口進行綁定,然后download下載自己公司基礎項目的框架,比如說封裝的各種模塊,插件之類的。每一步都自己嘗試一下,更詳細的步驟請見參考鏈接,那位大佬將所有詳細步驟都指點出來了,本文僅是我踩坑的記錄。

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM