博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TypeScript基础入门之模块解析(三)
阅读量:6814 次
发布时间:2019-06-26

本文共 2557 字,大约阅读时间需要 8 分钟。

hot3.png

转发 

继续上文[]

跟踪模块解析

如前所述,编译器可以在解析模块时访问当前文件夹之外的文件。

在诊断模块未解析的原因或解析为错误定义时,这可能很难。
使用--traceResolution启用编译器模块分辨率跟踪可以深入了解模块解析过程中发生的情况。

假设我们有一个使用typescript模块的示例应用程序。

app.ts有一个导入,比如import * as ts from "typescript"。

│   tsconfig.json├───node_modules│   └───typescript│       └───lib│               typescript.d.ts└───src    └───app.ts

使用--traceResolution调用编译器

tsc --traceResolution

输出结果如下:

======== Resolving module 'typescript' from 'src/app.ts'. ========Module resolution kind is not specified, using 'NodeJs'.Loading module 'typescript' from 'node_modules' folder.File 'src/node_modules/typescript.ts' does not exist.File 'src/node_modules/typescript.tsx' does not exist.File 'src/node_modules/typescript.d.ts' does not exist.File 'src/node_modules/typescript/package.json' does not exist.File 'node_modules/typescript.ts' does not exist.File 'node_modules/typescript.tsx' does not exist.File 'node_modules/typescript.d.ts' does not exist.Found 'package.json' at 'node_modules/typescript/package.json'.'package.json' has 'types' field './lib/typescript.d.ts' that references 'node_modules/typescript/lib/typescript.d.ts'.File 'node_modules/typescript/lib/typescript.d.ts' exist - use it as a module resolution result.======== Module name 'typescript' was successfully resolved to 'node_modules/typescript/lib/typescript.d.ts'. ========

值得关注的事情

1. 导入的名称和位置

======== Resolving module 'typescript' from 'src/app.ts'. ========

2. 编译器遵循的策略

Module resolution kind is not specified, using 'NodeJs'.

3. 从npm包加载类型

'package.json' has 'types' field './lib/typescript.d.ts' that references 'node_modules/typescript/lib/typescript.d.ts'.

4. 最后结果

======== Module name ‘typescript’ was successfully resolved to ‘node_modules/typescript/lib/typescript.d.ts’. ========

使用--noResolve

通常,编译器将在启动编译过程之前尝试解析所有模块导入。

每次成功解析导入到文件时,该文件都会添加到编译器稍后将处理的文件集中。

--noResolve编译器选项指示编译器不要将任何文件"add"到未在命令行上传递的编译中。

它仍将尝试将模块解析为文件,但如果未指定该文件,则不会包含该文件。

例如:

app.ts

import * as A from "moduleA" // OK, 'moduleA' passed on the command-lineimport * as B from "moduleB" // Error TS2307: Cannot find module 'moduleB'.
tsc app.ts moduleA.ts --noResolve

使用--noResolve编译app.ts应该导致:

1. 正确查找在命令行上传递的moduleA。
2. 找不到未通过的moduleB时出错。

常见问题

为什么排除列表中的模块仍然被编译器拾取?

tsconfig.json将文件夹转换为"project"。如果不指定任何"exclude"或"files"条目,则包含tsconfig.json及其所有子目录的文件夹中的所有文件都包含在编译中。

如果要排除某些文件使用"exclude",如果您希望指定所有文件而不是让编译器查找它们,请使用"files"。

那是tsconfig.json自动包含。

这并没有嵌入上面讨论的模块解析。
如果编译器将文件标识为模块导入的目标,则无论它是否在前面的步骤中被排除,它都将包含在编译中。

因此,要从编译中排除文件,您需要将其和所有具有import或/// <reference path ="..."/>指令的文件排除在外。

转载于:https://my.oschina.net/zhangdapeng89/blog/2245933

你可能感兴趣的文章
curl请求中http头的几种格式
查看>>
在XML中定义动画
查看>>
洛谷 P1101 单词方阵
查看>>
Github Pages + Jekyll 独立博客一小时快速搭建&上线指南
查看>>
数组指针和指针数组的区别(转)
查看>>
配置php开发环境
查看>>
函数的调用过程(栈帧)
查看>>
MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验【转】
查看>>
SOA面向服务化编程架构(dubbo)
查看>>
sphinx全文索引开源
查看>>
junit测试套件
查看>>
向一个网站发请求的几种方式
查看>>
UVA - 10245 The Closest Pair Problem
查看>>
利用Bootstrap制作一个流行的网页
查看>>
大型网站架构 图片服务器分离
查看>>
【设计模式】迭代器模式(Iterator )
查看>>
Linux ssh安全设置
查看>>
LVM逻辑卷管理
查看>>
ubuntu:重装之后软件安装流程
查看>>
python读写不同编码txt文件
查看>>