司徒正美老師微信群的一道面試題

前言

現(xiàn)在有一個aaa.js文件裕寨,它里面有如下操作,從終端提示用戶輸入一項(xiàng)目名派继,然后讀取下宾袜,在當(dāng)前目錄下,創(chuàng)建這目錄驾窟,并且生成一個package.json,里面有兩個依賴庆猫。要通過npm i安裝react react-dom;最后終端通知你安裝完畢。 只允許用戶執(zhí)行一次node aaa與輸入項(xiàng)目名绅络,完成這些操作

以上內(nèi)容時司徒正美老師在一個微信群里發(fā)的一道面試題月培。

分解一下題目有如下要求:

  1. 獲取用戶終端輸入

  2. 創(chuàng)建用戶輸入文件夾

  3. 生成 package.json 文件

  4. npm i 安裝 react 以及 react-dom

  5. 通知用戶依賴安裝完成

根據(jù)以上要求分別來實(shí)現(xiàn)

獲取用戶終端輸入

獲取用戶的終端輸入這個可以有好多種方法來實(shí)現(xiàn),可以用 fs.readSync + process.stdin 來實(shí)現(xiàn)昨稼,也可以用 readline.question节视,以上都是node原生模塊拳锚,也可以用inquirer這第三方庫(這個庫很強(qiáng)大假栓,可以實(shí)現(xiàn)各種姿勢的終端用戶交互)。此處情況沒有那么復(fù)雜霍掺,我是直接使用的readline.question來實(shí)現(xiàn)的匾荆,貼代碼:

// 獲取用戶輸入
const getUserInput = inputTip => {
  const myReadline = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });
  return new Promise((resolve, reject) => {
    myReadline.question(inputTip, answer => {
      myReadline.close();
      resolve(answer);
    });
  });
};

這個沒啥說的,直接不是很復(fù)雜杆烁,readline.question文檔牙丽。

創(chuàng)建用戶輸入文件夾

創(chuàng)建文件夾,這個是涉及到終端執(zhí)行shell命令mkdir兔魂,這里我是用child_process.exec來實(shí)現(xiàn)的烤芦,這個模塊可以

Spawns a shell then executes the command within that shell, buffering any generated output. The command string passed to the exec function is processed directly by the shell and special characters (vary based on shell) need to be dealt with accordingly:

所以代碼很簡單了,直接exec('mkdir test', (error, stdout, stderr) => {})析校。
這里有一點(diǎn)要注意的是當(dāng)前目錄下文件夾是否已經(jīng)存在构罗。這里要稍微處理下铜涉,先使用fs.readdirSync獲取當(dāng)前目錄下的所有文件以及文件夾列表,然后使用fs.statSync得到當(dāng)前目錄下的文件夾列表遂唧,對比用戶的輸入給出相應(yīng)提示芙代。

// 獲取當(dāng)前目錄下的文件夾列表
const getDirNameList = path => {
  let allList = fs.readdirSync(path);
  let dirList = [];
  allList.forEach(item => {
    if (fs.statSync(item).isDirectory()) {
      dirList.push(item);
    }
  });
  return dirList;
};

生成 package.json 文件

可以用npm init來生成,也可以fs.writeFileSync直接寫文件盖彭,我是直接寫的纹烹,代碼如下:

const generatePackageJsonFile = projectName => {
  const packageJSON = JSON.stringify(
    {
      "name": projectName,
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {
        "react": "^16.2.0",
        "react-dom": "^16.2.0"
      }
    }
  );

  fs.writeFileSync(`./${projectName}/package.json`, packageJSON);
};

npm i 安裝 react 以及 react-dom

由于package.json里已經(jīng)將依賴寫入了,所以這里直接exec執(zhí)行npm i即可

通知用戶依賴安裝完成

exec執(zhí)行的回調(diào)會在npm i結(jié)束之后執(zhí)行召边,所以這個沒有什么問題铺呵。

github代碼地址

總結(jié)

  1. 以上代碼在mac環(huán)境下node 8.9.4運(yùn)行有效,其他環(huán)境未測試隧熙。

  2. 這個讓我現(xiàn)場裸寫肯定不行陪蜻,我是一邊翻文檔一邊寫的。

感謝您的閱讀贱鼻,本文由 趙的拇指 版權(quán)所有宴卖。原文地址: https://www.zhaofinger.com/detail/23

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市邻悬,隨后出現(xiàn)的幾起案子症昏,更是在濱河造成了極大的恐慌,老刑警劉巖父丰,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肝谭,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛾扇,警方通過查閱死者的電腦和手機(jī)攘烛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镀首,“玉大人坟漱,你說我怎么就攤上這事「澹” “怎么了芋齿?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長成翩。 經(jīng)常有香客問我觅捆,道長,這世上最難降的妖魔是什么麻敌? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任栅炒,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赢赊。我一直安慰自己棒呛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布域携。 她就那樣靜靜地躺著簇秒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪秀鞭。 梳的紋絲不亂的頭發(fā)上趋观,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音锋边,去河邊找鬼皱坛。 笑死,一個胖子當(dāng)著我的面吹牛豆巨,可吹牛的內(nèi)容都是我干的剩辟。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼往扔,長吁一口氣:“原來是場噩夢啊……” “哼贩猎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起萍膛,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吭服,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蝗罗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艇棕,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年串塑,在試婚紗的時候發(fā)現(xiàn)自己被綠了沼琉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡桩匪,死狀恐怖打瘪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吸祟,我是刑警寧澤瑟慈,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站屋匕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏借杰。R本人自食惡果不足惜过吻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纤虽,春花似錦乳绕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杰刽,卻和暖如春菠发,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贺嫂。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工滓鸠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人第喳。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓糜俗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親曲饱。 傳聞我的和親對象是個殘疾皇子悠抹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容