Nodejs結合 JavaScript 模板字串完成繁瑣事務
ES6 有個好玩的東西:
let bar = "hello the nodejs!"; let foo = ` She saied :"${bar}" `; console.log(foo) // She said :"hello the nodejs!"
反引號(`)裡面字元的格式(換行、空格、縮排之類的)是不變的,寫了什麼就是什麼,而且可以通過"${}"嵌入變數。你可以用它輸出你想要的內容,我經常用來生成檔案——尤其是那些有固定格式的檔案。下面舉個例子:
用來寫visual studio code 編輯器的JSON檔案的程式碼片段。
"user strict"; const fs = require('fs'); const vars = [ "TM_SELECTED_TEXT", "TM_CURRENT_LINE", "TM_CURRENT_WORD", "TM_LINE_INDEX", "TM_LINE_NUMBER", "TM_FILENAME", "TM_FILENAME_BASE", "TM_DIRECTORY", "TM_FILEPATH", "CLIPBOARD", "CURRENT_YEAR", "CURRENT_YEAR_SHORT", "CURRENT_MONTH", "CURRENT_MONTH_NAME", "CURRENT_MONTH_NAME_SHORT", "CURRENT_DATE", "CURRENT_DAY_NAME", "CURRENT_DAY_NAME_SHORT", "CURRENT_HOUR", "CURRENT_MINUTE", "CURRENT_SECOND" ]; const snippetDes = [ "當前選定的文字或空字串", "當前行的內容", "游標下的單詞內容或空字串", "基於零索引的行號", "基於單索引的行號", "當前文件的檔名", "沒有副檔名的當前文件的檔名", "當前文件的目錄(DIRname)", "當前文件的完整檔案路徑", "剪貼簿的內容", "本年度(YYYY)", "本年度的最後兩位數", "月份為兩位數(例如'02')", "月份的全名(例如'July')", "月份的簡稱(例如'Jul')", "這個月的哪一天(10)", "一天的名字(例如'Monday')", "當天的簡稱(例如'Mon')", "24小時時鐘格式的當前小時('14')", "當前時間的——分鐘('10')", "當前時間的——秒('59')" ]; // 新增JSON頭部 let jsonH = `{ // ..........Start snippets variables .......... // Author: 1877675862@qq // USAGE: //1. 開啟VSCODE的“使用者程式碼片段”,選擇“json”型別。 //2. 拷貝本程式碼到“json.json”中儲存即可(如果已有其他的片段,最外圍的"{"和"}"不要複製進去)。 "FULLDATE":{ "prefix":"spfull", "body":"\\\"\\\\$CURRENT_YEAR-\\\\$CURRENT_MONTH-\\\\$CURRENT_DATE \\\\$CURRENT_HOUR:\\\\$CURRENT_MINUTE:\\\\$CURRENT_SECOND\\\"", "description":"日期時間:YYYY-MM-DD hh:mm:ss" },`; fs.writeFileSync('_json.json', jsonH, { encoding: 'utf8', flag: 'w' }) // 開始批量寫入snippets for (let i = 0; i < vars.length; i++) { let tmp; if (i !== vars.length - 1) { tmp = ` "${vars[i]}":{ "prefix":"sp", "body":"\\\"\\\\$${vars[i]}\\\"", "description":"獲取${snippetDes[i]}。" },`; } else { tmp = ` "${vars[i]}":{ "prefix":"sp", "body":"\\\"\\\\$${vars[i]}\\\"", "description":"獲取${snippetDes[i]}。" }`; } console.log(vars[i] + " done!") fs.writeFileSync('_json.json', tmp, { encoding: 'utf8', flag: 'a' }) } // 新增尾部內容 let endsp = ` // ..........End snippets variables .......... } `; fs.writeFileSync('_json.json', endsp, { encoding: 'utf8', flag: 'a' })
JSON檔案雖然用著方便,但寫的時候很麻煩——引號"
符號太多了,寫好模板用node跑一下就輕鬆得到了,最終生成的檔案如下(_json.json
):
{ // ..........Start snippets variables .......... // Author: 1877675862@qq // USAGE: //1. 開啟VSCODE的“使用者程式碼片段”,選擇“json”型別。 //2. 拷貝本程式碼到“json.json”中儲存即可(如果已有其他的片段,最外圍的"{"和"}"不要複製進去)。 "FULLDATE":{ "prefix":"spfull", "body":"\"\\$CURRENT_YEAR-\\$CURRENT_MONTH-\\$CURRENT_DATE \\$CURRENT_HOUR:\\$CURRENT_MINUTE:\\$CURRENT_SECOND\"", "description":"日期時間:YYYY-MM-DD hh:mm:ss" }, "TM_SELECTED_TEXT":{ "prefix":"sp", "body":"\"\\$TM_SELECTED_TEXT\"", "description":"獲取當前選定的文字或空字串。" }, "TM_CURRENT_LINE":{ "prefix":"sp", "body":"\"\\$TM_CURRENT_LINE\"", "description":"獲取當前行的內容。" }, "TM_CURRENT_WORD":{ "prefix":"sp", "body":"\"\\$TM_CURRENT_WORD\"", "description":"獲取游標下的單詞內容或空字串。" }, "TM_LINE_INDEX":{ "prefix":"sp", "body":"\"\\$TM_LINE_INDEX\"", "description":"獲取基於零索引的行號。" }, "TM_LINE_NUMBER":{ "prefix":"sp", "body":"\"\\$TM_LINE_NUMBER\"", "description":"獲取基於單索引的行號。" }, "TM_FILENAME":{ "prefix":"sp", "body":"\"\\$TM_FILENAME\"", "description":"獲取當前文件的檔名。" }, "TM_FILENAME_BASE":{ "prefix":"sp", "body":"\"\\$TM_FILENAME_BASE\"", "description":"獲取沒有副檔名的當前文件的檔名。" }, "TM_DIRECTORY":{ "prefix":"sp", "body":"\"\\$TM_DIRECTORY\"", "description":"獲取當前文件的目錄(DIRname)。" }, "TM_FILEPATH":{ "prefix":"sp", "body":"\"\\$TM_FILEPATH\"", "description":"獲取當前文件的完整檔案路徑。" }, "CLIPBOARD":{ "prefix":"sp", "body":"\"\\$CLIPBOARD\"", "description":"獲取剪貼簿的內容。" }, "CURRENT_YEAR":{ "prefix":"sp", "body":"\"\\$CURRENT_YEAR\"", "description":"獲取本年度(YYYY)。" }, "CURRENT_YEAR_SHORT":{ "prefix":"sp", "body":"\"\\$CURRENT_YEAR_SHORT\"", "description":"獲取本年度的最後兩位數。" }, "CURRENT_MONTH":{ "prefix":"sp", "body":"\"\\$CURRENT_MONTH\"", "description":"獲取月份為兩位數(例如'02')。" }, "CURRENT_MONTH_NAME":{ "prefix":"sp", "body":"\"\\$CURRENT_MONTH_NAME\"", "description":"獲取月份的全名(例如'July')。" }, "CURRENT_MONTH_NAME_SHORT":{ "prefix":"sp", "body":"\"\\$CURRENT_MONTH_NAME_SHORT\"", "description":"獲取月份的簡稱(例如'Jul')。" }, "CURRENT_DATE":{ "prefix":"sp", "body":"\"\\$CURRENT_DATE\"", "description":"獲取這個月的哪一天(10)。" }, "CURRENT_DAY_NAME":{ "prefix":"sp", "body":"\"\\$CURRENT_DAY_NAME\"", "description":"獲取一天的名字(例如'Monday')。" }, "CURRENT_DAY_NAME_SHORT":{ "prefix":"sp", "body":"\"\\$CURRENT_DAY_NAME_SHORT\"", "description":"獲取當天的簡稱(例如'Mon')。" }, "CURRENT_HOUR":{ "prefix":"sp", "body":"\"\\$CURRENT_HOUR\"", "description":"獲取24小時時鐘格式的當前小時('14')。" }, "CURRENT_MINUTE":{ "prefix":"sp", "body":"\"\\$CURRENT_MINUTE\"", "description":"獲取當前時間的——分鐘('10')。" }, "CURRENT_SECOND":{ "prefix":"sp", "body":"\"\\$CURRENT_SECOND\"", "description":"獲取當前時間的——秒('59')。" } // ..........End snippets variables .......... }
可能你會覺得直接寫可能比先寫好模板在執行要快!的確,程式碼量差不多,直接寫可能是要快些,但等到需要多次修改的時候你就會發現有模板真的太好了......
一般JSON是沒有使用(//)進行註釋的,這裡只是例外。