成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你使用TypeScript開(kāi)發(fā)Node.js應(yīng)用

開(kāi)發(fā) 前端
為了減少代碼編寫過(guò)程中出現(xiàn)的錯(cuò)誤,以及更好的維護(hù)你的項(xiàng)目,本文將手把手教你配置一個(gè)簡(jiǎn)單的開(kāi)發(fā)環(huán)境來(lái)編寫Node.js的應(yīng)用程序,創(chuàng)建這樣的一個(gè)開(kāi)發(fā)環(huán)境有很多方式,這只是其中一種,希望對(duì)你有所幫助!

為什么要使用TypeScript?

為了減少代碼編寫過(guò)程中出現(xiàn)的錯(cuò)誤,以及更好的維護(hù)你的項(xiàng)目,本文將手把手教你配置一個(gè)簡(jiǎn)單的開(kāi)發(fā)環(huán)境來(lái)編寫Node.js的應(yīng)用程序,創(chuàng)建這樣的一個(gè)開(kāi)發(fā)環(huán)境有很多方式,這只是其中一種,希望對(duì)你有所幫助!

[[264316]]

手把手教你使用TypeScript開(kāi)發(fā)Node.js應(yīng)用

首先配置package.json

因?yàn)橐陧?xiàng)目中使用Webpack,所以首先得創(chuàng)建一個(gè)package.json文件,我們可以使用npm init來(lái)生成 

  1.  
  2.  "name": "start",  
  3.  "version": "1.0.0",  
  4.  "description": "",  
  5.  "main": "index.js",  
  6.  "scripts": {  
  7.  "test": "echo "Error: no test specified" && exit 1"  
  8.  },  
  9.  "author": "",  
  10.  "license": "ISC"  

后面用到其他的在添加

開(kāi)始

我們?cè)陧?xiàng)目的根目錄創(chuàng)建一個(gè)src目錄,添加一個(gè)main.js和information-logger.js文件,我們先使用Javascript來(lái)創(chuàng)建: 

  1. // src/information-logger.js  
  2. const os = require('os');  
  3. const { name, version} = require('../package.json');  
  4. module.exports = {  
  5.  logApplicationInformation: () =>  
  6.  console.log({  
  7.  application: {  
  8.  name,  
  9.  version,  
  10.  },  
  11.  }),  
  12.  logSystemInformation: () =>  
  13.  console.log({  
  14.  system: {  
  15.  platform: process.platform,  
  16.  cpus: os.cpus().length,  
  17.  },  
  18.  }),  
  19. };  
  20. // src/main.js  
  21. const informationLogger = require('./information-logger');  
  22. informationLogger.logApplicationInformation();  
  23. informationLogger.logSystemInformation(); 

我們先運(yùn)行一下:node main.js(先到src目錄下),打印了我的筆記本電腦的信息:

Webpack

首先***件事就是要配置Webpack的依賴項(xiàng),記得用下面的命令,帶上 -d,因?yàn)槲覀冎辉陂_(kāi)發(fā)環(huán)境下 :

  1. npm i -D webpack webpack-cli 

我們沒(méi)用到webpack-dev-server,安裝完成后我們創(chuàng)建webpack.config.js的配置文件。

  1. 'use strict';  
  2. module.exports = (env = {}) => {  
  3.  const config = {  
  4.  entry: ['./src/main.js'],  
  5.  mode: env.development ? 'development' : 'production',  
  6.  target: 'node',  
  7.  devtool: env.development ? 'cheap-eval-source-map' : false,  
  8.  };  
  9. return config;  
  10. }; 

最開(kāi)始我們沒(méi)那么多的配置需要配置。我們要使用它,先改一下package.json :

  1. “scripts”:{   
  2.  “start”:“webpack --progress --env.development”,  
  3.  “start :prod”:“webpack --progress”   
  4.  }, 

然后我們就可以通過(guò)任一命令(npm start)來(lái)構(gòu)建應(yīng)用程序,它會(huì)創(chuàng)建一個(gè)dist/main.js,我們可也使用webpack.config.js指定輸出不同的名稱,現(xiàn)在的目錄結(jié)構(gòu)應(yīng)該如下:

nodemon

為什么不用webpack-dev-server,是因?yàn)闆](méi)法用,所以可以使用nodemon來(lái)解決,它可以在我們開(kāi)發(fā)期間重新啟動(dòng)Node.js的應(yīng)用程序,一樣我們先來(lái)安裝,依然需要 -d 。

  1. npm i -D nodemon-webpack-plugin 

然后重新配置webpack.config.js 。

  1. // webpack.config.js  
  2. 'use strict';  
  3. const NodemonPlugin = require('nodemon-webpack-plugin');  
  4. module.exports = (env = {}) => {  
  5.  const config = {  
  6.  entry: ['./src/main.js'],  
  7.  mode: env.development ? 'development' : 'production',  
  8.  target: 'node',  
  9.  devtool: env.development ? 'cheap-eval-source-map' : false,   
  10.  resolve: { // tells Webpack what files to watch.  
  11.  modules: ['node_modules', 'src', 'package.json'],  
  12.  },   
  13.  plugins: [] // required for config.plugins.push(...);  
  14.  };  
  15. if (env.nodemon) {  
  16.  config.watch = true 
  17.  config.plugins.push(new NodemonPlugin());  
  18.  }  
  19. return config;  
  20. }; 

Webpack 監(jiān)視配置將在我們更改文件時(shí)重建應(yīng)用程序,nodemon在我們構(gòu)建完成重新啟動(dòng)應(yīng)用程序,需要重新配置下package.json 。

  1. "scripts": {  
  2.  "start": "webpack --progress --env.development --env.nodemon",  
  3.  "start:prod": "webpack --progress --env.nodemon",  
  4.  "build": "webpack --progress --env.development",  
  5.  "build:prod": "webpack --progress",  
  6.  "build:ci": "webpack"  
  7.  }, 

使用TypeScript

先安裝依賴項(xiàng):

  1. npm i -D typescript ts-loader @types/node@^10.0.0 

ts-loader(ts加載器)

因?yàn)橐胻s-loader Webpack插件來(lái)編譯我們的TypeScript,所以得讓W(xué)ebpack知道我們是使用了ts-loader插件來(lái)處理TypeScript文件的,更新之前的webpack.config.js 

  1. // webpack.config.js  
  2.  'use strict';  
  3. const NodemonPlugin = require('nodemon-webpack-plugin');  
  4. module.exports = (env = {}) => {  
  5.  const config = {  
  6.  entry: ['./src/main.ts'],  
  7.  mode: env.development ? 'development' : 'production',  
  8.  target: 'node',  
  9.  devtool: env.development ? 'cheap-eval-source-map' : false,  
  10.  resolve: {  
  11.  // Tells Webpack what files to watch   
  12.  extensions: ['.ts', '.js'],  
  13.  modules: ['node_modules', 'src', 'package.json'],  
  14.  },  
  15.  module: {  
  16.  rules: [  
  17.  {  
  18.  test: /.ts$/,  
  19.  use: 'ts-loader',  
  20.  },  
  21.  ],  
  22.  },  
  23.  plugins: [], // Required for config.plugins.push(...);  
  24.  };  
  25. if (env.nodemon) {  
  26.  config.watch = true 
  27.  config.plugins.push(new NodemonPlugin());  
  28.  }  
  29. return config;  
  30. }; 

tsconfig.json

TypeScript的配置文件:

  1. // tsconfig.json  
  2.  
  3.  "compilerOptions": {  
  4.  "target": "esnext",  
  5.  "module": "esnext",  
  6.  "moduleResolution": "node",  
  7.  "lib": ["dom", "es2018"],  
  8.  "allowSyntheticDefaultImports": true,  
  9.  "noImplicitAny": true, 
  10.   "noUnusedLocals": true,  
  11.  "removeComments": true,   
  12.  "resolveJsonModule": true,  
  13.  "strict": true,  
  14.  "typeRoots": ["node_modules/@types"]  
  15.  },  
  16.  "exclude": ["node_modules"],  
  17.  "include": ["src/**/*.ts"]  

然后更改下之前創(chuàng)建的js文件擴(kuò)展名:

  1. // information-logger.ts  
  2. import os from 'os';  
  3. import { name, version } from '../package.json';  
  4. export class InformationLogger {  
  5.  static logApplicationInformation(): void {  
  6.  console.log({  
  7.  application: {  
  8.  name,  
  9.  version,  
  10.  },  
  11.  });  
  12.  }  
  13. static logSystemInformation(): void {  
  14.  console.log({  
  15.  system: {  
  16.  platform: process.platform,  
  17.  cpus: os.cpus().length,  
  18.  },  
  19.  });  
  20.  }  
  21.  
  22. // main.ts  
  23. import { InformationLogger } from './information-logger';  
  24. InformationLogger.logApplicationInformation();  
  25. InformationLogger.logSystemInformation(); 

現(xiàn)在目錄結(jié)構(gòu)應(yīng)該是這樣的

總結(jié)

我們可以使用多種方式來(lái)創(chuàng)建TypeScript的Nodejs應(yīng)用,不必拘泥于這一種,而且可能會(huì)有人并不贊同,因?yàn)門ypeScript比純Javascript更需要花費(fèi)更多精力,不過(guò)在新項(xiàng)目中,你仍然可以嘗試這種方式,如果你有什么好的建議,歡迎在評(píng)論區(qū)留下你的意見(jiàn)!

[[264318]]

 

責(zé)任編輯:龐桂玉 來(lái)源: 今日頭條
相關(guān)推薦

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開(kāi)發(fā)應(yīng)用

2021-02-26 11:54:38

MyBatis 插件接口

2020-08-12 09:07:53

Python開(kāi)發(fā)爬蟲

2021-11-24 16:02:57

鴻蒙HarmonyOS應(yīng)用

2022-12-07 08:42:35

2015-04-02 11:22:29

2024-03-05 18:27:43

2024-04-02 08:58:13

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機(jī)

2021-08-02 07:35:19

Nacos配置中心namespace

2022-07-22 12:45:39

GNU

2021-03-12 10:01:24

JavaScript 前端表單驗(yàn)證

2021-12-15 08:49:21

gpio 子系統(tǒng)pinctrl 子系統(tǒng)API

2020-05-15 08:07:33

JWT登錄單點(diǎn)

2022-10-30 10:31:42

i2ccpuftrace

2021-01-19 09:06:21

MysqlDjango數(shù)據(jù)庫(kù)

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 黄色大片毛片 | 欧美日韩国产精品一区 | 九九综合 | 夏同学福利网 | 国产羞羞视频在线观看 | 日韩欧美在线免费观看视频 | 亚洲欧美日韩中文字幕一区二区三区 | 中国免费黄色片 | 91在线精品秘密一区二区 | h视频免费在线观看 | 亚洲福利在线观看 | 亚洲成av人片在线观看无码 | 中文字幕国产一区 | 亚洲福利视频网 | 精品色| 日韩综合色 | 亚洲一二视频 | 久久人人国产 | 一级h片 | 午夜欧美一区二区三区在线播放 | 午夜精品久久 | 午夜寂寞影院在线观看 | 午夜视频在线 | 亚洲专区在线 | 99在线免费观看视频 | 日本不卡在线观看 | 亚洲视频二 | 日韩欧美一区二区三区免费看 | 婷婷色国产偷v国产偷v小说 | 日韩午夜场| 日韩波多野结衣 | 中文字幕亚洲精品 | 午夜久久久久久久久久一区二区 | 欧美不卡视频 | 狠狠ri| 视频一区二区三区中文字幕 | 欧美亚洲网站 | 欧美一级片在线播放 | 亚洲成人一二三 | 日本成人在线观看网站 | 99久久久久久 |