<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Typescript 開發(fā) Nodejs 命令行工具

          共 4804字,需瀏覽 10分鐘

           ·

          2020-12-11 18:42

          來源@https://zhuqingguang.github.io/2020/11/07/nodejs-cli-with-typescript/

          本文記錄了搭建基于 TypeScript 的 Nodejs 命令行開發(fā)環(huán)境的全過程。

          為何使用TypeScript

          首先,對于編寫類庫或者工具而言,使用 TypeScript 的最大好處就是其提供了類型機制,可以避免我們犯一些低級錯誤。

          其次,配合編輯器(如 VS Code),TypeScript 能提供強大的代碼提示功能,我們不需要記憶很多API的具體使用,在編寫代碼時編輯器會自動進行提示。比如引入了?http?之后,輸入?http.?就會提示可以使用的各個方法和屬性,并給出詳細的說明。

          同是微軟旗下,VS Code 具有非常強大便利的功能,強烈推薦使用 VS Code 進行 TypeScript 和 Nodejs 開發(fā)。

          最后,使用 TypeScript 是大勢所趨,很多大公司都在推 TypeScript,使用 TypeScript 開發(fā),可以讓我們對 TS 使用更加熟練。

          初始化工程

          建立命令行工具,需要先創(chuàng)建一個 npm 包。下文將使用 npm 工具來完成包的初始化和依賴的安裝。

          首先創(chuàng)建一個文件夾,然后運行初始化命令:

          mkdir ts-node-demo && cd ts-node-demo
          npm init

          控制臺會出現一系列提示, 按照需求輸入即可,然后一路回車,完成之后輸入?yes?。

          package name: (typescript-cli) 
          version: (1.0.0)
          description: a cli in typescript
          entry point: (index.js)
          test command:
          git repository:
          keywords: CLI,TypeScript
          author: YourName
          license: (ISC) MIT

          初始化之后本地文件夾會出現一個?package.json?文件。我們的 npm 包就已經初始化完成了。為了避免誤發(fā)布,我們在?package.json?中做一個更改:

          - private: false,
          + private: true,

          初始化 Git

          在當前目錄下運行:

          git init

          然后在當前目錄創(chuàng)建?.gitignore?文件,指定忽略?node_modules?文件夾:

          node_modules/
          lib/

          引入 Node 類型

          既然是開發(fā) Nodejs 程序,為了獲得合適的類型校驗和代碼提示,我們需要引入 Nodejs 的類型文件:

          npm i -D @types/node

          引入 typescript

          npm i typescript

          然后需要初始化?tsconfig?文件。

          ./node_modules/.bin/tsc --init

          上述命令會在當前文件夾下面創(chuàng)建一個?tsconfig?文件,用來指導 TypeScript 進行編譯。在里面有非常多的配置項,并且有非常詳細的解釋,我們做兩個更改來適配我們的項目:

          + "sourceMap": true,
          + "outDir": "lib",
          + "moduleResolution": "node",
          • "sourceMap": true?指定生成 sourceMap,方便我們調試程序;

          • "outDir": "lib"?指定 TypeScript 將編譯結果輸出到?./lib?文件夾;

          • "moduleResolution": "node"?表明我們將使用 Nodejs 的方式去尋找模塊。

          然后在與?compilerOptions?平級的地方增加選項:

          + "include": [
          + "src/**/*"
          + ]

          這表示我們只會編譯?src?目錄下的?.ts?文件。

          編寫代碼

          在當前目錄下創(chuàng)建?src?文件夾,并創(chuàng)建?index.ts

          mkdir src && echo "console.log('Your cli is running.');" > src/index.ts

          然后運行:

          ./node_modules/.bin/tsc

          可以發(fā)現在文件夾下出現了?lib/?目錄,里面就是?index.ts?編譯之后的 js 文件。

          創(chuàng)建運行腳本

          每次編譯都需要引用?node_modules?里面的?tsc?命令,有些繁瑣,有三種方法可以解決:

          1. 全局安裝 typescript 包:

            npm i typescript -g

            就可以直接使用?tsc?命令了。

          2. 使用?npx?執(zhí)行?npx?是 npm 提供的命令,其會自動下載對應的包并執(zhí)行.

            npx tsc
          3. 創(chuàng)建 npm 腳本 在?package.json?中的?script?中增加一行腳本:

            {
            "script": {
            + "build": "tsc"
            }
            }

          這里我們采用第3種方法,寫入腳本后可以執(zhí)行:

          npm run build

          也會成功進行編譯。

          注冊命令

          開發(fā) Nodejs 命令行工具,就是提供一個可以直接調用的命令,而不是使用下面這種方式執(zhí)行文件:

          node lib/index.js

          我們想要的效果是執(zhí)行一個命令就能調用我們的 js 文件。

          首先在當前文件夾創(chuàng)建文件?bin/node-cli-demo?:

          mkdir bin && touch bin/node-cli-demo.js

          然后在文件中寫入以下內容:

          #!/usr/bin/env node
          require('../lib/index.js');

          npm 包注冊的命令需要在?package.json?中進行聲明,增加如下內容:

          {
          "name": "typescript-cli",
          "version": "0.0.1",
          + "bin": {
          + "node-cli-demo": "./bin/node-cli-demo.js"
          + },
          }

          這表示當執(zhí)行?node-cli-demo?這個命令時就去執(zhí)行我們的?./bin/node-cli-demo.js?文件。

          最后在當前目錄調用?npm link?,這條命令會把我們本地注冊的命令放到 Nodejs 安裝目錄的?bin?文件夾下。在安裝 Nodejs 時系統將該文件夾添加到命令查找的路徑中。所以我們就可以直接使用我們剛剛注冊的命令:

          node-cli-demo
          // Your cli is running.

          自動監(jiān)聽文件變動

          我們希望每次更改了?.ts?文件之后,不必手動執(zhí)行?npm run build?就能看到最新的效果,可以使用 typescript 的?--watch?選項,在?package.json?中的?script?中增加?start?命令:

          {
          "script": {
          + "start": "tsc --watch"
          }
          }

          在當前目錄下運行命令:

          npm start

          然后對?src/index.ts?文件做一些更改,另開一個控制臺窗口,運行?node-cli-demo,會發(fā)現打印的內容已經更新了。這樣我們在開發(fā)時就只需要關注代碼編寫,而不用考慮編譯的問題了。

          接下來我們就可以在?src?文件里面寫我們的具體代碼了!

          注:?本文的 demo 代碼可以在 github 上查看。為了避免創(chuàng)建很多倉庫,我將其放到了一個倉庫的子目錄里面。

          總結

          使用 TypeScript 開發(fā) Nodejs 命令行的流程如下:

          1. 安裝 typescript 并進行配置;

          2. 在?package.json?中聲明命令并使用?npm link?將其鏈接到全局命令中;

          3. 使用?tsc --watch?自動監(jiān)聽文件變動并重新編譯;

          4. 運行注冊過的命令,查看效果。

          配置ESLint

          使用 ESLint 校驗我們的代碼,可以避免一些低級錯誤。而 TypeScript 現在推薦采用 ESLint 來檢查代碼。我們可以為我們的工程配置 ESLint。

          安裝依賴

          首先安裝依賴:

          npm i -D eslint @typescript-eslint/parser  @typescript-eslint/eslint-plugin
          • @typescript-eslint/parser 是用來解析 TypeScript 代碼的,類似于 @babel/parser;

          • @typescript-eslint/eslint-plugin 是 ESLint 插件,用來配置具體的檢查規(guī)則。

          設置配置

          在根目錄下創(chuàng)建?.eslintrc, 寫入以下內容:

          {
          "root": true,
          "parser": "@typescript-eslint/parser",
          "plugins": [
          "@typescript-eslint"
          ],
          "extends": [
          "eslint:recommended",
          "plugin:@typescript-eslint/eslint-recommended",
          "plugin:@typescript-eslint/recommended"
          ],
          "rules": {
          "no-console": "error"
          },
          // set eslint env
          "env": {
          "node": true
          }}
          • root: true?表示當前目錄就是尋找 ESLint 的最終配置,這樣 ESLint 就不會再往上層尋找配置;

          • parse?指定了使用?@typescript-eslint/parser?來解析我們的 TypeScript 代碼;

          • plugins?指定使用的 ESLint 插件;

          • extends?指定了額外使用的規(guī)則配置。插件指定了一系列自定義的規(guī)則配置,只有在?extends?中指定才會生效。

          • rules?中可以擴展我們自己的規(guī)則。

          • env?中可以指定我們代碼運行的環(huán)境,這樣就可以自動判斷某些代碼是不是有錯誤。比如上述配置了?node: true?,我們在使用?require?的時候就不會報錯了。

          運行校驗命令

          在?package.json?的?script?中寫入:

          {
          "script": {
          "lint": "eslint ./src --ext .ts"
          }}

          上述命令指定了對?./src?目錄下擴展名為?.ts?的文件進行校驗。

          然后運行?npm run lint,會發(fā)現控制臺出現報錯,我們的 ESLint 已經生效了。

          配置 VSCode 的 ESLint 插件,編輯器在開發(fā)時就會自動提示有問題的代碼,幫助我們編寫符合規(guī)范的代碼。

          忽略某些文件

          我們可以指定某些目錄下的文件不進行校驗,在當前目錄下創(chuàng)建?.eslintignore?,類似?.gitignore,然后在里面寫入需要忽略的目錄或文件:

          node_modules

          至此,ESLint 也配置完成了!

          以上就是搭建 Nodejs 命令行的 TypeScript 開發(fā)環(huán)境的全部內容了,希望能幫到大家~


          ??愛心三連擊

          1.看到這里了就點個在看支持下吧,你的點贊在看是我創(chuàng)作的動力。

          2.關注公眾號程序員成長指北,回復「1」加入Node進階交流群!「在這里有好多 Node 開發(fā)者,會討論 Node 知識,互相學習」!

          3.也可添加微信【ikoala520】,一起成長。


          “在看轉發(fā)”是最大的支持

          瀏覽 51
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本免费一级黄色片 | 亚洲精品成人7777777 | 亚洲无码视频在线播放 | 欧美日韩人妻精品 | 思思操 |