TS学习4-模块化

一些用到的配置项:

配置名称 含义 常见取值
module 设置编译结果中,使用的模块化标准 es6commonjs
moduleResolution 设置解析模块的模式 node
alwaysStrict 编译结果中不包含 "use strict",(旧版 ts 该配置项是 noImplicitUseStrict truefalse
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 目录,一直到项目根目录。

以上。

相关推荐

  1. TS学习4-模块

    2024-04-25 06:54:03       74 阅读
  2. 「前端+鸿蒙」鸿蒙应用开发-TS-模块

    2024-04-25 06:54:03       35 阅读
  3. 2024/4/2 HarmonyOS学习笔记一TS数据类型

    2024-04-25 06:54:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-25 06:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-25 06:54:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-25 06:54:03       82 阅读
  4. Python语言-面向对象

    2024-04-25 06:54:03       91 阅读

热门阅读

  1. 芯片安全(security)

    2024-04-25 06:54:03       39 阅读
  2. LeetCode 541. 反转字符串 II

    2024-04-25 06:54:03       165 阅读
  3. Hadoop - 安装

    2024-04-25 06:54:03       40 阅读
  4. Docker 的基本概念和优势

    2024-04-25 06:54:03       37 阅读
  5. 适用于WPF模式开发的主题和控件库Material Design

    2024-04-25 06:54:03       37 阅读
  6. 【语音识别】搭建本地的语音转文字系统:FunASR

    2024-04-25 06:54:03       41 阅读
  7. Centos7+Hadoop3.3.4+KDC1.15集成认证

    2024-04-25 06:54:03       131 阅读