node环境搭建typescript 环境,懒人版

简介: node环境搭建typescript 环境,懒人版

node环境搭建typescript


上效果


20210108181400588.png


看这篇文章,你可以收获在node环境中,编写代码,自动运行,编译成js。


安装库


npm install typescript -D 我们要明白一个原理,ts(typescript) 是js的超集,生效的还是js,因此,ts所在的部分是编译成js,把js拉上了一个层次,使用ts就是在开发阶段编译成js,然后和js是一样的。ts 的作用 传送门


安装可以使用局部安装或者全局安装,这里使用局部安装。安装好后,typescript会给我们提供一个命令, tsc, 我们写好的ts的代码可以使用 npx tsc + 文件名 例如: npx tsc index.ts 来进行编译。但是编译好后ts文件会报错如下图:


20210108160035160.png


原因:默认情况下,ts会做出几种假设


1.假设当前的执行环境是dom,因为ts编译的环境,他不知道是node,还是dom,所以默认的执行环境是dom,。


2.如果代码中没有使用模块化(commonjs, cmd, amd es的模块),如:import, export 等便认为该代码是全局执行的


3.编译的目标默认是es3,为了全方面的兼容。我们都知道,dom环境的变量var 是全局的,如果已经有了,再一次var 的话,那就就会重复声明变量


更改方法


1.在使用npx tsc index – 加上选项参数 进行编译


2.使用typescript的配置文件,更改编译选项, 可以自己手动新建文件 tsconfig.json 也可以使用命令 npx tsc --init 来自动生成tsconfig.json 这个文件


添加配置文件


我个人的配置文件:


{
  "compilerOptions": {
    "target": "es2016", //使用es7的标准
    "module": "commonjs", //编译目标的模块化标准,由于是node环境,使用commonjs的模块化标准
    "lib": ["es2016"], // ts使用的环境是node, 使用es的环境,如果是dom的话,直接使用dom
    "outDir": "./dist" // 编译输出的目录
  },
  "include": ["./src"], // 值编译src里面的.ts文件
  // "files": [], // 指定编译的文件
}


其他配置文件:


{
// 编译选项
  "compilerOptions": {
    /* Basic Options */ 基础配置
    // "incremental": true,                   /* 启用增量编译  Enable incremental compilation   */
    "target": "es5",                          /*指定ECMAScript目标版本,默认ES3  Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
    "module": "commonjs",                     /*指定编译模块化代码的生成,node环境使用commonjs Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
    // "lib": [],                             /*指定要包含在编译中的库文件,例如是node环境还是浏览器环境,node环境使用es2015-es2020 ,如果是浏览器环境直接使用dom就好了 Specify library files to be included in the compilation. */
    // "allowJs": true,                       /*允许编译javascript文件  Allow javascript files to be compiled. */
    // "checkJs": true,                       /*报告.js文件中的错误  Report errors in .js files. */
    // "jsx": "preserve",                     /*指定JSX代码生成 Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /*生成相应的.d.ts的文件 Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /*为每个对应对象生成一个sourcemap .d.ts文件 Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /*生成.map文件  Generates corresponding '.map' file. */
    // "outFile": "./",                       /*输出单个文件位置  Concatenate and emit output to single file. */
    // "outDir": "./",                        /*输出文件到文件夹的位置,例如vue打包后的结果是到dist文件夹里面  Redirect output structure to the directory. */
    // "rootDir": "./",                       /*指定输入文件的根目录。用于控制输出目录结构 Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /*项目是否需要编译 Enable project compilation */
    // "tsBuildInfoFile": "./",               /*指定文件去保存编译信息,应该和日志文件一样吧 Specify file to store incremental compilation information */
    // "removeComments": true,                /*编译是否需要移除注释信息 Do not emit comments to output. */
    // "noEmit": true,                        /*不生成输出文件 Do not emit outputs. */
    // "importHelpers": true,                 /*从 tslib 导入辅助工具函数 Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /*全面支持es5,es3 使用for-of的迭代,解构等, Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /*将每个文件转换为一个单独的模块 Transpile each file as a separate module (similar to 'ts.transpileModule'). */
    /* 严格模式的配置 Strict Type-Checking Options */
    "strict": true,                           /*启用所有严格的类型检查选项 Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /*如果编译器无法根据变量的使用来判断类型时,将用 any 类型代替 Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /*启用严格null检查 Enable strict null checks. */
    // "strictFunctionTypes": true,           /*启用严格的function类型检查 Enable strict checking of function types. */
    // "strictBindCallApply": true,           /*启用严格的bind,call 和apply的严格检查 Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /*启用严格检查类实例化的属性 Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /*当 this 表达式值为 any 类型的时候,生成一个错误 Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* 以严格模式检查每个模块,并在每个文件里加入 'use strict' Parse in strict mode and emit "use strict" for each source file. */
    /*额外的检查 Additional Checks */ 
    // "noUnusedLocals": true,                /*报告没有使用的变量错误的地方 Report errors on unused locals. */
    // "noUnusedParameters": true,            /*报告参数没有使用 Report errors on unused parameters. */
    // "noImplicitReturns": true,             /*报告函数返回值不匹配的错误 Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /*报告switch中的case的错误 Report errors for fallthrough cases in switch statement. */
    // "noUncheckedIndexedAccess": true,      /*报告值为undefined的错误 Include 'undefined' in index signature results */
    /*模块解析配置 Module Resolution Options */
    // "moduleResolution": "node",            /*解析模式使用的策略 Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /*用于解析非绝对模块名称的基本目录 Base directory to resolve non-absolute module names. */
    // "paths": {},                           /*模块名到基于 baseUrl 的路径映射的列表 A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /*根文件夹列表,其组合内容表示项目运行时的结构内容 List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /*包含类型定义的文件夹列表 List of folders to include type definitions from. */
    // "types": [],                           /*编译类型声明文件 Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /*允许从没有默认导出的模块中进行默认导入。这并不影响代码执行,只是类型检查  Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /*通过为所有导入创建名称空间对象,实现CommonJS和ES模块之间的互操作性。意味着“allowSyntheticDefaultImports” Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /*不适用绝对路径 Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /*允许从模块中访问UMD全局变量 Allow accessing UMD globals from modules. */
    /*sourcemap的配置选项 Source Map Options */
    // "sourceRoot": "",                      /*指定TypeScript源文件的路径,以便调试器定位。当TypeScript文件的位置是在运行时指定时使用此标记。路径信息会被加到sourceMap里。 Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /*指定调试器应该找到映射文件而不是生成文件的位置 Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* 生成单个 soucemaps 文件,而不是将 sourcemaps 生成不同的文件 Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /*将代码与 sourcemaps 生成到一个文件中,要求同时设置了 --inlineSourceMap 或 --sourceMap 属性 Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
    /*实验性的配置 Experimental Options */
    // "experimentalDecorators": true,        /*启用ES7的装饰器 Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /*装饰器提供元数据的支持 Enables experimental support for emitting type metadata for decorators. */
    /*高级配置 Advanced Options */
    "skipLibCheck": true,                     /*跳过声明文件的类型检查 Skip type checking of declaration files. */
    "forceConsistentCasingInFileNames": true  /*禁止对同一文件使用大小写不一致的引用 Disallow inconsistently-cased references to the same file. */
  }
}


注意: 使用配置文件后, npx tsc index 这里不能使用后缀名,如果使用后缀名,会自动忽略配置文件的ts配置


其它库支持类型检查


我们在写代码的时候,我们希望我们的代码接受类型检查,也希望我们引用第三方的库也是使用类型检查,例如我们在node 环境中,那么请按照 @types/node 这个库 npm install @types/node -D


@types 是一个ts的官方库,里面包含了很多对js类型的描述的库,如果我们想要在ts中是使用jquery, 那么我们可以安装 @types/jquery 这个库,对jquery的代码进行类型检查

我们编译好文件后,如果要运行文件,我们需要使用 node ./dist/index.js 每一次都需要重启和修改一点都要重新启动才能看到效果


使用第三方库来方便开发


  • npm install ts-node -D 代码的编译在内存中,不输出,直接运行代码,这里会提供一个ts-node 的指令来运行代码, 细心的发现我这里也是局部安装,所以使用方法需要 npx ts-node index.ts 来进行编译运行


  • 20210108180828279.png


  • npm install nodemon -D 这个库是用于热加载代码的, 默认是全局加载代码 ,可以使用nodeman.json 这个配置文件,或者使用命令。 这里使用命令 npx nodemon --watch src -e ts --exec npx ts-node src/index.ts 这句话的意思是 使用nodemon 监听 src 里面的带 .ts 的文件变化,变化后执行 ts-node src/index.ts 来编译ts文件,或者在package.json 文件里面加入


"scripts": {
   "dev": "nodemon --watch src -e ts --exec ts-node src/index.ts",
    "build": "rd /s /q dist & tsc" // 这行命令是指,编译,先删除dist 文件夹,然后在编译,这个 rd /s /q 是指windows 下面删除文件夹的命令,mac 的请自行百度
  },


后面只需要 npm run dev 就可以启动文件


20210108181242546.png


接下来就可以在node的环境中使用ts啦。

相关文章
|
3月前
|
Rust JavaScript 前端开发
Node.js 添加对 TypeScript 的实验性支持
Node.js 添加对 TypeScript 的实验性支持
145 53
|
29天前
|
Web App开发 JavaScript 前端开发
探索Deno:新一代JavaScript/TypeScript运行时环境
【10月更文挑战第25天】Deno 是一个新兴的 JavaScript/TypeScript 运行时环境,由 Node.js 创始人 Ryan Dahl 发起。本文介绍了 Deno 的核心特性,如安全性、现代化、性能和 TypeScript 支持,以及开发技巧和实用工具。Deno 通过解决 Node.js 的设计问题,提供了更好的开发体验,未来有望进一步集成 WebAssembly,拓展其生态系统。
|
6月前
|
前端开发
windows10 安装node npm 等前端环境 并配置国内源
windows10 安装node npm 等前端环境 并配置国内源
340 3
|
4月前
|
JavaScript 前端开发 编译器
TypeScript教程(一)在vscode中的配置TypeScript环境
本文是一篇TypeScript入门教程,介绍了在VS Code中配置TypeScript环境的步骤,包括安装Node.js、使用npm安装TypeScript、配置npm镜像源、安装VS Code的TypeScript扩展,以及创建和运行一个简单的TypeScript "Hello World"程序。
TypeScript教程(一)在vscode中的配置TypeScript环境
|
3月前
|
SQL JavaScript 数据库
sqlite在Windows环境下安装、使用、node.js连接
sqlite在Windows环境下安装、使用、node.js连接
|
3月前
|
JavaScript 前端开发 Windows
NodeJS的环境部署
介绍如何在Windows操作系统上安装Node.js环境,包括下载长期支持版本的Node.js、安装程序、编写测试代码并执行,以及如何在WebStorm集成开发环境中配置和运行Node.js。
50 1
|
4月前
|
缓存 JavaScript Ubuntu
Node.js环境怎么搭建?
【8月更文挑战第4天】Node.js环境怎么搭建?
71 1
|
4月前
|
JavaScript Serverless Linux
函数计算产品使用问题之遇到Node.js环境下的请求日志没有正常输出时,该如何排查
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
4月前
|
JavaScript Linux 容器
【Azure 应用服务】NodeJS项目部署在App Service For Linux环境中,部署完成后应用无法访问
【Azure 应用服务】NodeJS项目部署在App Service For Linux环境中,部署完成后应用无法访问