TS学习4-模块化

一些用到的配置项:

配置名称含义常见取值
module设置编译结果中,使用的模块化标准es6commonjs
moduleResolution设置解析模块的模式node
alwaysStrict编译结果中不包含 "use strict",(旧版 ts 该配置项是 noImplicitUseStricttruefalse
removeComments编译结果中,移除注释truefalse
noEmitOnError发生错误时,不生成编译结果truefalse
esModuleInterop启用 es 模块化交互,可以引入那些使用非 es 导出的模块truefalse

1,ts 中如何使用模块化

导入导出,统一使用 es6 模块化标准即可。

2,编译结果中的模块化

如果在 ts 中使用 es6 模块化标准,在编译为 js 时:

  • 配置 modulees6 时,结果无变化
  • 配置 modulecommonjs 时,导出的声明会变成 exports 的属性,默认导出会变成 exportsdefault 属性。

也可以用这一特性,来对比 es6 和 commonjs 的写法区别。

2.1,使用 node 模块的问题

import fs from "fs";
fs.readFileSync('./') 

编译为 commonjs 后(node 使用的 commonjs )

const fs_1 = require("fs");
fs_1.default.readFileSync('./');

原因:node 模块不是 ts 写的,而且 fs 并不是默认导出。

另外,需要安装 @types/node 才有智能提示。

3种解决办法

1,

import {readFileSync} from "fs";
readFileSync('./') 

2,

import * as fs from "fs";
fs.readFileSync('./') 

前2个编译为 commonjs 后:

const fs_1 = require("fs");
fs_1.readFileSync('./');

3,配置 esModuleInterop: true,则可以直接 import fs from "fs"; 这样使用了。

编译为 commonjs 后,可以看到 __importDefault 函数返回了一个对象,对象的 default 属性值是require("fs"),所以 fs_1.default.readFileSync('./'); 就可以正常使用了。

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
const fs_1 = __importDefault(require("fs"));
fs_1.default.readFileSync('./');
console.log('1');

3,模块解析的策略

很早之前 ts 版本使用的是 classic 经典模式,在 es6 和 node 出来之后,大多都会使用 node 解析策略。

  • 相对路径:require('./xxx')
    • 先找引入路径目录下,也就是当前目录;
    • 再找引入路径目录下的 package.json 中的 main 字段;
    • 再找引入路径目录下的 index.ts
  • 非相对路径:require('xxx')
    • 找的是 node_modules 目录下的模块。从当前目录逐层往上查找 node_modules 目录,一直到项目根目录。

以上。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雪天的夏风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值