构建纯TypeScript应用

现在只有命令行应用的例子

前言

现在,应用开发的趋势是命令行接口应用和Web应用

node.js 和 typescript的崛起所以,这里讨论如何创建纯的TypeScript CLI(Command Line Interface)应用和Web server-side应用。

概念

  • typescript

  • node.js

    node.js是一个javascript的运行环境。

  • npm

    npm是一个javascript包管理器。也是node.js的默认包管理器。

环境准备

  • 安装node.js

    node.js网站上下载,并安装。

    这时,npm也一并被安装了。
:: check version
node -v
npm -v
  • 更新npm

    node.js带的npm不一定是最新的,所以要更新npm
:: Update npm to the latest version
npm install npm@latest -g
npm -v
  • 安装typescript
:: install typescript
npm install -g typescript
:: check version
tsc -v

构建typescript CLI应用

  • 创建一个新的项目
mkdir myproj
cd myproj
npm init

这个命令会在当前目录创建一个项目配置文件:package.json

内容类似如下:

{
"name": "myproj",
"version": "1.0.0",
"description": "",
"main": "App.ts",
"scripts": {
"test": "ts-node .\\src\\App.ts name address"
},
"keywords": [
"my",
"example"
],
"author": "your name",
"license": "MIT",
}
  • 下一个App.ts代码

    创建目录src

    在目录src下,创建一个文件App.ts
class Startup {
public static main(): number {
var args = process.argv;
args.splice(0, 2);
console.log(args);
return 0;
}
} Startup.main();
  • 运行App.ts

    运行目录: myproj
ts-node .\src\App.ts name address
:: or run script 'test' in the package.json
npm run test
  • 设置项目的依赖

    运行目录: myproj
npm install @types/node --save-dev

这时,npm会下载@types/node到./node_modules下,package.json文件会增加下面内容:

{
"devDependencies": {
"@types/node": "^8.0.33"
}
}

构建typescript Web server-side应用

好吧。我还不会。

Type Script 的文件

  • .ts

    TypeScript源码文件。

  • .tsx

    主要是支持React的jsx文件,是一种可以嵌入XML-like的TypeScript源文件。

  • .d.ts

    TypeScript源码的声明文件,一般是可以自动生成的。

    有些像是C++的.h文件。我想一个作用是方便参照使用,性能更好一些。

  • tsconfig.json

    tsconfig.json是Type Script项目的配置文件。

了解tsconfig.json

tsconfig.json是Type Script项目的配置文件。主要包含如下信息:

  • 编译器选项 - compilerOptions

    在下一小节里,专门介绍主要的编译器选项。

  • 项目的文件 - files/include/exclude

    基本上可以使用下面这个统一形式:

{
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"../**/*.spec.ts"
]
}
  • extends

    指定一个基本配置文件。

    详见tsconfig-json

  • compileOnSave 是否自动编译

编译器选项 - tsconfig.json - compilerOptions

详见Compiler Options

  • @types, typeRoots, types

    默认,编译器会从本地的node_modules/@types找types的声明文件。

    所以,一般不要含有typeRoots和types设定(空的也不行)。

    如果有typeRoots设定,编译器将忽略node_modules/@types

    如果有types设定,编译器将只找types定义的声明文件包。

  • Pure Type Script 编译器选项

    "compilerOptions": {
"emitDecoratorMetadata": true, // for typeorm
"experimentalDecorators": true, // for typeorm
"lib": ["esnext"],
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"pretty": true,
"target": "esnext",
"module": "commonjs", // work with node.js only
"moduleResolution": "node"
}
  • lib
  • target/module/moduleResolution

了解一下npm

npm提供了丰富的功能,可以做很多事情,包括:

  • manage packages

    install/uninstall/update/docs/doctor/star/unstar

  • manage a project

    /init/install/uninstall/update

  • run a project

    build/rebuild/run/scripts/start/test/restart/stop

  • publish a project

    pack/registry/publish/unpublish/deprecate/adduser/owner

  • options

    config/root/prefix/bin

npm folders and files

  • Prefix folder

    %AppData%\npm

  • Global install path

    %AppData%\npm\node_modules

  • Global cache

    %AppData%\npm-cache

  • Package install path

    .\node_modules

  • npmrc

    npm 配置文件。四个Level:

    per-project config file (/path/to/my/project/.npmrc)

    per-user config file (~/.npmrc)

    global config file ($PREFIX/etc/npmrc)

    npm builtin config file (/path/to/npm/npmrc)

  • package.json

    项目配置文件

  • package-lock.json

    自动生成的配置文件,不会被发布。

    精确描述依赖包,辅助安装、发布功能。

  • npm-shrinkwrap.json

    npm shrinkwrap命令产生,完完全全和package-lock.json内容一样,但是会被发布。

npm 命令

  • init
:: 问一系列问题,产生一个package.json
npm init [-f|--force|-y|--yes]

init的参数:

-f|--force|-y|--yes: 没有提示,产生一个默认的package.json文件。

  • install
:: 安装当前项目的依赖包.
npm install (with no args, in package dir) :: 安装包
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range> :: 安装一个online的包
npm install <git-host>:<git-user>/<repo-name> :: 安装一个online的包
npm install <git repo url> :: 安装一个已下载的包
npm install <tarball file> :: 安装一个online的包
npm install <tarball url> :: 安装一个已经下载并解开(或者是没有打包)的包,<folder>是包的位置。
npm install <folder>

install的别名: npm i

install的参数:

-P|--save-prod: 默认,并保存到项目的dependencies配置中。

-D|--save-dev: 并保存到项目的devDependencies配置中。

-O|--save-optional: 并保存到项目的optionalDependencies配置中。

-E|--save-exact: 使用精确的版本信息保存

-B|--save-bundle: 并保存到项目的bundleDependencies配置中。

--no-save: 不保存到项目配置中。

-g|--global: 安装包到global位置。

-f|--force: 强制重新安装。

  • run|run-script
npm run-script <command> [--silent] [-- <args>...]
:: or alias
npm run <command> [--silent] [-- <args>...]

其它工具

参照Integrating with Build Tools

  • gulp: 构建系统
  • Karma: JavaScript的测试工具

参照

构建纯TypeScript应用的更多相关文章

  1. 【react】使用 create-react-app 构建基于TypeScript的React前端架构----上

    写在前面 一直在探寻,那优雅的美:一直在探寻,那精湛的技巧:一直在探寻,那简单又直白,优雅而美丽的代码. ------ 但是在JavaScript的动态类型.有时尴尬的自动类型转换,以及 “0 == ...

  2. vue cli4构建基于typescript的vue组件并发布到npm

    基于vue cli创建一个vue项目 首先安装最新的vue cli脚手架, npm install --global @vue/cli npm WARN optional SKIPPING OPTIO ...

  3. 如何开发Vite3插件构建Electron开发环境

    新用户购买<Electron + Vue 3 桌面应用开发>,加小册专属微信群,参与群抽奖,送<深入浅出Electron>.<Electron实战>作者签名版. 1 ...

  4. Nodejs in Visual Studio Code 12.构建单页应用Scrat实践

    1.开始 随着前端工程化深入研究,前端工程师现在碉堡了,甚至搞了个自己的前端网站http://div.io/需要邀请码才能注册,不过里面的技术确实牛.距离顶级的前端架构,目前博主应该是far away ...

  5. 动手实现 Redux(三):纯函数(Pure Function)简介

    我们接下来会继续优化我们的 createStore 的模式,让它使我们的应用程序获得更好的性能. 但在开始之前,我们先用一节的课程来介绍一下一个函数式编程里面非常重要的概念 —— 纯函数(Pure F ...

  6. EdgeFormer: 向视觉 Transformer 学习,构建一个比 MobileViT 更好更快的卷积网络

    ​  前言 本文主要探究了轻量模型的设计.通过使用 Vision Transformer 的优势来改进卷积网络,从而获得更好的性能. 欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结.最新技术跟 ...

  7. Blazor VS 传统Web应用程序

    原文作者: Christian Findlay 原文链接: https://christianfindlay.com/2020/07/09/blazor-vs-traditional-web-apps ...

  8. Jser 设计模式系列之面向对象 - 接口封装与继承

    GOF在<设计模式>中说到:面向接口编程,而非面向实现编程 鉴于此,这个概念可见一斑! JS却不像其他面向对象的高级语言(C#,Java,C++等)拥有内建的接口机制,以确定一组对象和另一 ...

  9. 加速编码的 JavaScript 库和工具

    JavaScript库是 一个提前写好的JavaScript文件库,它可以很容易的开发基于JavaScript的应用,特别是AJAX和一些其它的以web为中心的技术.运用JavaScript最基本的方 ...

随机推荐

  1. Nginx动静分离架构

    Nginx动静分离简单来说就将动态与静态资源分开,不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat,Res ...

  2. angular2 学习笔记 ( 第3方插件 jQuery and ckeditor )

    refer : https://forums.meteor.com/t/importing-ckeditor-using-npm/28919/2   (ckeditor) https://github ...

  3. ELK学习总结(4-2)关于导入数据

    用REST API的_bulk来批量插入,可以达到5到10w条每秒 把数据写进json文件,然后再通过批处理,执行文件插入数据: 1.先定义一定格式的json文件,文件不能过大,过大会报错 2.后用c ...

  4. word2vec初探(用python简单实现)

    为什么要用这个? 因为看论文和博客的时候很常见,不论是干嘛的,既然这么火,不妨试试. 如何安装 从网上爬数据下来 对数据进行过滤.分词 用word2vec进行近义词查找等操作 完整的工程传到了我的gi ...

  5. NetSNMP开源代码学习——mib扩展

    扩展MIB库关于MIB库的扩展网络文章非常多,这里我主要参考了http://blog.csdn.net/qq_27204267/article/details/51595708,这篇文章介绍的比较简单 ...

  6. mysql中出现Unknown column 'qwe' in 'field list'的错误

    下面是我建表的代码 输入数据的代码 可以看到出现了类似Unknown column 'qwe' in 'field list'的错误 当时看了好久改了又改都没有找到错误,直道我在一次打C语言代码的过程 ...

  7. 【H5-移动端开发】外部唤起本机APP的解决方法

    太长时间没来博客园,原因很简单啊--太懒了!罪过罪过~ 最近公司的APP项目开始运行,采用的是原生框架+内嵌H5页面.作为一个菜鸡前端,开始入手学习移动端的界面制作加载性能优化.由于公司开始推广软件, ...

  8. Spring(2)——Spring IoC 详解

    Spring IoC 概述 IoC:Inverse of Control(控制反转) 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控 ...

  9. ubuntu安装IBM DB2 Express-C

    去 官网 下载DB2对应Linux下的安装包和语言包.

  10. 使用Navicat Premium 链接本地数据库的方法(二)

    最早一篇:http://www.cnblogs.com/zhengyeye/p/6363179.html 现在又重新装了电脑系统,需遇到了同样的问题.恰巧记得之前自己写的文档,没准可以帮助自己解决掉这 ...