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

手把手教你使用TypeScript開發(fā)Node.js應(yīng)用
首先配置package.json
因?yàn)橐陧?xiàng)目中使用Webpack,所以首先得創(chuàng)建一個(gè)package.json文件,我們可以使用npm init來(lái)生成
{
"name": "start",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC"
}
后面用到其他的在添加
開始
我們?cè)陧?xiàng)目的根目錄創(chuàng)建一個(gè)src目錄,添加一個(gè)main.js和information-logger.js文件,我們先使用Javascript來(lái)創(chuàng)建:
// src/information-logger.js
const os = require('os');
const { name, version} = require('../package.json');
module.exports = {
logApplicationInformation: () =>
console.log({
application: {
name,
version,
},
}),
logSystemInformation: () =>
console.log({
system: {
platform: process.platform,
cpus: os.cpus().length,
},
}),
};
// src/main.js
const informationLogger = require('./information-logger');
informationLogger.logApplicationInformation();
informationLogger.logSystemInformation();
我們先運(yùn)行一下:node main.js(先到src目錄下),打印了我的筆記本電腦的信息

Webpack
首先第一件事就是要配置Webpack的依賴項(xiàng),記得用下面的命令,帶上 -d,因?yàn)槲覀冎辉陂_發(fā)環(huán)境下
npm i -D webpack webpack-cli
我們沒(méi)用到webpack-dev-server,安裝完成后我們創(chuàng)建webpack.config.js的配置文件
'use strict';
module.exports = (env = {}) => {
const config = {
entry: ['./src/main.js'],
mode: env.development ? 'development' : 'production',
target: 'node',
devtool: env.development ? 'cheap-eval-source-map' : false,
};
return config;
};
最開始我們沒(méi)那么多的配置需要配置。我們要使用它,先改一下package.json
“scripts”:{
“start”:“webpack --progress --env.development”,
“start :prod”:“webpack --progress”
},
然后我們就可以通過(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)解決,它可以在我們開發(fā)期間重新啟動(dòng)Node.js的應(yīng)用程序,一樣我們先來(lái)安裝,依然需要 -d
npm i -D nodemon-webpack-plugin
然后重新配置webpack.config.js
// webpack.config.js
'use strict';
const NodemonPlugin = require('nodemon-webpack-plugin');
module.exports = (env = {}) => {
const config = {
entry: ['./src/main.js'],
mode: env.development ? 'development' : 'production',
target: 'node',
devtool: env.development ? 'cheap-eval-source-map' : false,
resolve: { // tells Webpack what files to watch.
modules: ['node_modules', 'src', 'package.json'],
},
plugins: [] // required for config.plugins.push(...);
};
if (env.nodemon) {
config.watch = true;
config.plugins.push(new NodemonPlugin());
}
return config;
};
Webpack 監(jiān)視配置將在我們更改文件時(shí)重建應(yīng)用程序,nodemon在我們構(gòu)建完成重新啟動(dòng)應(yīng)用程序,需要重新配置下package.json
"scripts": {
"start": "webpack --progress --env.development --env.nodemon",
"start:prod": "webpack --progress --env.nodemon",
"build": "webpack --progress --env.development",
"build:prod": "webpack --progress",
"build:ci": "webpack"
},
使用TypeScript
先安裝依賴項(xiàng)
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
// webpack.config.js
'use strict';
const NodemonPlugin = require('nodemon-webpack-plugin');
module.exports = (env = {}) => {
const config = {
entry: ['./src/main.ts'],
mode: env.development ? 'development' : 'production',
target: 'node',
devtool: env.development ? 'cheap-eval-source-map' : false,
resolve: {
// Tells Webpack what files to watch
extensions: ['.ts', '.js'],
modules: ['node_modules', 'src', 'package.json'],
},
module: {
rules: [
{
test: /.ts$/,
use: 'ts-loader',
},
],
},
plugins: [], // Required for config.plugins.push(...);
};
if (env.nodemon) {
config.watch = true;
config.plugins.push(new NodemonPlugin());
}
return config;
};
tsconfig.json
TypeScript的配置文件
// tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"lib": ["dom", "es2018"],
"allowSyntheticDefaultImports": true,
"noImplicitAny": true,
"noUnusedLocals": true,
"removeComments": true,
"resolveJsonModule": true,
"strict": true,
"typeRoots": ["node_modules/@types"]
},
"exclude": ["node_modules"],
"include": ["src/**/*.ts"]
}
然后更改下之前創(chuàng)建的js文件擴(kuò)展名
// information-logger.ts
import os from 'os';
import { name, version } from '../package.json';
export class InformationLogger {
static logApplicationInformation(): void {
console.log({
application: {
name,
version,
},
});
}
static logSystemInformation(): void {
console.log({
system: {
platform: process.platform,
cpus: os.cpus().length,
},
});
}
}
// main.ts
import { InformationLogger } from './information-logger';
InformationLogger.logApplicationInformation();
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ū)留下你的意見!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 在Node.js中使用TypeScript的方法示例
- typescript在node.js下使用別名(paths)無(wú)效的問(wèn)題詳解
- 使用nodejs?+?koa?+?typescript?集成和自動(dòng)重啟的問(wèn)題
- nodemon實(shí)現(xiàn)Typescript項(xiàng)目熱更新的示例代碼
- 淺談TypeScript 用 Webpack/ts-node 運(yùn)行的配置記錄
- TypeScript開發(fā)Node.js程序的方法
- 詳解使用Typescript開發(fā)node.js項(xiàng)目(簡(jiǎn)單的環(huán)境配置)
- Node.js和Express中設(shè)置TypeScript的實(shí)現(xiàn)步驟
相關(guān)文章
Node.js結(jié)合FFmpeg構(gòu)建自動(dòng)化腳本實(shí)現(xiàn)轉(zhuǎn)碼視頻
傳統(tǒng)的視頻轉(zhuǎn)碼中,很常用的工具是FFmpeg,本文主要介紹了Node.js結(jié)合FFmpeg構(gòu)建自動(dòng)化腳本實(shí)現(xiàn)轉(zhuǎn)碼視頻,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
詳解一個(gè)基于套接字實(shí)現(xiàn)長(zhǎng)連接的express
這篇文章主要介紹了詳解一個(gè)基于套接字實(shí)現(xiàn)長(zhǎng)連接的express,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
Node.js用readline模塊實(shí)現(xiàn)輸入輸出
在學(xué)C++的時(shí)候,有cout和cin,Java也有println和Scanner控件,Node.js也有如同C++和Java的標(biāo)準(zhǔn)輸入,當(dāng)然,是用JavaScript實(shí)現(xiàn)的,它就是Readline模塊。下面這篇文章就給大家詳細(xì)介紹一下readline模塊,來(lái)實(shí)現(xiàn)Node.js的控制臺(tái)輸入輸出。有需要的可以參考借鑒。2016-12-12
Nodejs進(jìn)階:如何將圖片轉(zhuǎn)成datauri嵌入到網(wǎng)頁(yè)中去實(shí)例
這篇文章主要介紹了Nodejs進(jìn)階:如何將圖片轉(zhuǎn)成datauri嵌入到網(wǎng)頁(yè)中去,有興趣的可以了解一下。2016-11-11
Mac下通過(guò)brew安裝指定版本的nodejs教程
今天小編就為大家分享一篇Mac下通過(guò)brew安裝指定版本的nodejs教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
使用Nodejs連接mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了使用Nodejs連接mongodb數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-08-08
快速掌握Node.js之Window下配置NodeJs環(huán)境
快速掌握Node.js之Window下配置NodeJs環(huán)境,如何在Window下快速配置NodeJs環(huán)境,感興趣的小伙伴們可以參考一下2016-03-03
Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù)
本文主要介紹了Node實(shí)現(xiàn)前端本地開發(fā)接口代理服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

