当我第一次发现 TypeScript 时,就把它用到了自己的 JavaScript 程序中。使用 TypeScript 有很多好处,现在你要让我在用原生 JavaScript 写任何东西的话,需要给我一个令人信服的理由。
在本文中,我将向你展示如何设置一个简单的开发环境,以便使用 TypeScript 编写 Node.js 应用程序。
首先在 TypeScript 中可能有一千种或更多种不同的方法去创建 Node.js 程序。我只是想展示自己喜欢的方式。
另外你可以在此处找到我的入门项目:https://github.com/toxsickcoder/node-typescript-starter。里面有一些不会在本文中讨论的额外功能。
Package.json
就像我之前说过的,有很多方法可以做到这一点。我喜欢将 Webpack 用于 TypeScript 项目。但首先要做的是从创建一个 package.json 开始。
你可以用 npm init 命令生成 package.json,也可以复制粘贴下面的代码并进行更改。
// package.json { "name": "node-typescript", "version": "0.0.1", "author": "Freek Mencke", "homepage": "https://medium.com/@freek_mencke", "license": "MIT", "scripts": {}, "dependencies": {}, "devDependencies": {} }
让我们从 JavaScript Node.js 项目的简单 Webpack 配置开始。完成基本设置后,将添加 TypeScript。
程序
如前所述,我们将从 JavaScript 程序开始,稍后将其转换为 TypeScript。首先创建一个带有 main.js 和 information-logger.js 文件的 src/ 目录,其中包含一些 Node.js 功能:
// 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();
这段脚本会将一些系统信息输出到控制台。运行 node main.js 后,可以看到以下输出:
{ application: { name: 'node-typescript', version: '0.0.1' } }
{ system: { platform: 'linux', cpus: 8 } }
Webpack
在使用 Webpack 之前,需要做的第一件事就是安装必要的依赖项。不要忘记使用 -D 标志,它代表 devDependencies。
npm i -D webpack webpack-cli
你可能注意到我没有安装 webpack-dev-server 。这因为我们正在创建一个 Node.js 应用程序。后面我会使用 nodemon,它有相同的用途。
webpack.config.js
下一步是创建一个 webpack.config.js 文件,通过它告诉 Webpack 应该如何处理我们的代码。
// 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; };
如你所见,从 Webpack 开始并不需要太多配置。唯一需要的两个选项是 entry 和 target。我们用 entry 字段声明程序的入口点,告诉 Webpack 在 Node.js 中使用 target 字段。
可以用 mode 字段告诉 Webpack 它应该关注编译速度(开发)还是混淆和缩小(生产)。为了帮助调试,需要在开发模式中运行,用 devtool 字段来指示我们想要源映射。这样,如果出现错误,可以很容易地在代码中找到它出现的位置。
要使用 Webpack,需要创建一些 npm 命令:
// package.json ... "scripts": { "start": "webpack --progress --env.development", "start:prod": "webpack --progress" }, ...
现在可以通过运行这些命令来构建程序。它将创建一个目录 dist/,其中包含输出文件 main.js 。可以用 webpack.config.js 中的 output configuration 指定一个不同的名称。
我们的项目现在应该是这样的:
dist/ main.js node_modules/ src/ information_logger.js main.js package-lock.json package.json webpack.config.js
nodemon
你可能已经注意到,在运行启动命令后,Webpack 会在构建应用程序后停止。它不会监视我们对的文件所所做的改动。由于我们正在使用 Node.js,所以无法用 webpack-dev-server。
幸运的是可以用 nodemon 来解决这个问题。它是专门为这个目的而开发的工具:在开发期间重新启动 Node.js 应用程序。
让我们从安装 nodemon-webpack-plugin开始。不要忘记 -D 标志,因为它是一个 devDependency。
npm i -D nodemon-webpack-plugin
让我们创建一个新的 nodemon 标志,并将插件添加到的 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; };
当我们传递 nodemon 标志时,需要设置 Webpack watch config,并添加 nodemon 插件。当我们更改文件时,Webpack watch config 将会重建程序。 nodemon 插件会在重建完成后重新启动程序。
我们还需要更新 npm 命令。我还创建了一些没有 nodemon标志的构建命令,。
// 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" ], ...
我们完成了 Node.js 程序的基本 Webpack 设置。下一步是添加 TypeScript!
TypeScript
现在让我们添加 TypeScript!首先安装需要的依赖项。
由于这是一个 Node.js 项目,我们还需要安装相关的支持。我正在研究 Node.js 的 LTS 版本,也就是10 版。这就是我安装 ^ 10.0.0 版的原因。
npm i -D typescript ts-loader @types/node@^10.0.0
ts-loader
我们将用 ts-loader Webpack 插件来编译 TypeScript。
我们需要将 entry 文件的后缀更改为 .ts 并告诉 webpack 它还必须解析 .ts 文件(默认情况下,Webpack仅适用于 .js 文件)。
// webpack.config.js ... 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(...); }; ...
tsconfig.json
如果现在尝试运行我们的程序,它将会崩溃。因为还缺少 tsconfig.json 文件。所以先创建一个。
// 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"] }
如上所示,我更喜欢严格的 tsconfig 文件,你可以不必这样做。我喜欢把自己的目标代码语法版本设定的很高( esnext 或 es2018),因为 Node.js 对新的 JavaScript 功能支持的非常好。
程序
我们仍然需要将 JavaScript 文件的扩展名从 .js 改为.ts。让我们这样做并尝试运行项目。
运行项目后,可以立即看到我们在创建的测试应用程序中犯了“错误”。我们无法对 package.json 中的 name 字段进行解构,因为它可能已经被定义了或者我们覆盖了它。所以需要做一些改动。
// 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();
如果你遵循了前面所有步骤,那么现在项目结构应该是这样的:
dist/ main.js node_modules/ src/ information-logger.ts main.ts package-lock.json package.json tsconfig.json webpack.config.js
我们已准备好用 TypeScript 编写 Node.js 程序了!
最后的注意事项
我确信在 TypeScript 中有数千种不同的方法来编写 Node.js 应用程序。我所写下的绝不是你必须要照样做的方式,这只是你可以做到的方式中的一种。
剩下来的步骤可能是添加 TSLint 集成,添加 Dockerfile,设置 CI 管道……一切尽在你的掌握之中。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Android开发退出程序的方法汇总,包括了Android开发退出程序的方法汇总的使用技巧和注意事项,需要的朋友参考一下 Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面呐喊教程小编就给大家介绍android开发退出程序的几种方法。 1、finish()方法 f
易语言是一个跨平台的开发工具,支持Windows及Linux。使用易语言,您可以在Windows环境下编写基本于Windows的程序,及编写Linux下的程序,并且可分别发布于多个平台。分别发布时只需选择不同的操作系统即可。 在此,再次通知易语言用户,如果您编写的是基于Windows下的程序,可以使用易语言新版本直接编写,对跨平台没有丝毫影响,跟以前的操作没有两样。如果您想开发基于Linux系统下
本文向大家介绍微信小程序开发打开另一个小程序的实现方法,包括了微信小程序开发打开另一个小程序的实现方法的使用技巧和注意事项,需要的朋友参考一下 微信小程序打开另一个小程序,有两种方法:1.超链接;2.点击按钮。 全局配置: 跳转到其他小程序,需要在当前小程序全局配置中配置需要跳转的小程序列表,代码如下: App.json 否则会弹出以下错误提示: 超链接实现跳转到小程序: demo.wxml de
本文向大家介绍node.js 和HTML5开发本地桌面应用程序,包括了node.js 和HTML5开发本地桌面应用程序的使用技巧和注意事项,需要的朋友参考一下 HTML5让Web开发人员用纯HTML技术开发富客户端互联网应用或者甚至本地桌面应用成为了可能。HTML5可以将任何普通网站转变成Web应用。HTML5 web 应用不仅具有在桌面浏览器应用中的优势,同时在智能手机和平板中也是开发利器。 在
- 1.新建一个Module(一个Module就相当于一个app) 如果已经有一个Project,那么可以直接新建一个Module,如果没有先去新建一个Project。 如图: 创建工程,可以参考“开发HelloWorld程序(Android原生)” 这里的Minumum SDK要选择API16及以上,Weex目前只支持到API16级以上。 这个时候我们WXHelloWorld程序的原生壳子就创
本文向大家介绍充分发挥Node.js程序性能的一些方法介绍,包括了充分发挥Node.js程序性能的一些方法介绍的使用技巧和注意事项,需要的朋友参考一下 一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意。 因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一个可以并行的Node.JS运用。在这篇博文里,