Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Webpack] ts 编写的库, 在使用 webpack 构建的时候, 如何对外提供 d.ts【热度: 224】 #769

Open
yanlele opened this issue May 26, 2024 · 0 comments
Labels
工程化 web 项目工程化 阿里巴巴 公司标签
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented May 26, 2024

关键词:对外提供 d.ts

在 TypeScript (TS) 中使用 Webpack 构建并为库提供 .d.ts 类型声明文件,需要遵循以下步骤:

  1. 配置 TypeScript 编译选项
    在库项目的根目录下创建或编辑 tsconfig.json 文件,确保编译器配置选项如下:

    {
      "compilerOptions": {
        "declaration": true, // 生成对应的 '.d.ts' 文件
        "declarationDir": "types", // 指定生成的声明文件存放目录
        "outDir": "lib" // 指定编译后文件的输出目录
        // 其他需要的编译选项
      },
      "include": ["src/**/*"], // 包含源码的目录
      "exclude": ["node_modules"] // 排除的目录
    }
    • declaration: 这个选项会告诉 TypeScript 编译器为每个 .ts 文件生成相应的 .d.ts 声明文件。
    • declarationDir: 这是指定声明文件的输出目录。
  2. 配置 Webpack
    在我们的 Webpack 配置中(通常是 webpack.config.js),我们需要设置 output 以指向我们的输出目录,同时可能需要使用一些加载器(loader)如 ts-loaderbabel-loader 来处理 TypeScript 文件。

    一个简单的 webpack 配置示例可能如下:

    const path = require("path");
    
    module.exports = {
      entry: "./src/index.ts", // 入口文件
      module: {
        rules: [
          {
            test: /\.tsx?$/,
            use: "ts-loader",
            exclude: /node_modules/,
          },
        ],
      },
      resolve: {
        extensions: [".tsx", ".ts", ".js"],
      },
      output: {
        filename: "your-library.js", // 输出文件名
        path: path.resolve(__dirname, "lib"), // 输出文件夹
        libraryTarget: "umd", // 使库支持各种模块系统
        globalObject: "this",
      },
    };
  3. 发布包
    当你发布你的库时,你需要确保 package.json 文件中包含 typestypings 字段指向入口 .d.ts 文件。

    例如:

    {
      "name": "your-library",
      "version": "1.0.0",
      "main": "lib/your-library.js",
      "typings": "types/index.d.ts"
      // 其他配置项...
    }

    这告诉使用你库的 TypeScript 用户,在哪里可以找到类型声明文件。

  4. 保证类型声明文件的发布
    如果你的 npm 发布流程排除了 types 目录,你需要更新 .npmignore 文件来确保 .d.ts 文件会被包含在发布的 npm 包中。

完成这些配置后,当你用 webpack 构建并发布你的库时,用户将能够获得与 JavaScript 文件关联的 TypeScript 类型声明,以便在他们的 TypeScript 项目中获得类型检查和智能提示。

@yanlele yanlele added 工程化 web 项目工程化 阿里巴巴 公司标签 labels May 26, 2024
@yanlele yanlele added this to the milestone May 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
工程化 web 项目工程化 阿里巴巴 公司标签
Projects
None yet
Development

No branches or pull requests

1 participant