从零到一: 创建一个 TypeScript 7 项目

简介: 本文介绍如何从零创建一个基于 TypeScript 7 的 Node.js 项目。项目使用 ECMAScript 模块 (ESM),并提供两条构建路径。TypeScript 编译器负责生成可发布文件,webpack 负责生成独立的 bundle。

准备开发环境

请先确保已安装 Node.js,检查本地版本:

node --version

初始化项目:

mkdir new-typescript-project
cd new-typescript-project
npm init --yes

项目完成后的主要目录如下:

├── package.json
├── tsconfig.json
├── webpack.config.js
└── src
    └── index.ts

安装 TypeScript 和开发工具

TypeScript 7 的编译器使用 Go 重写为原生实现。tsc 可以直接执行编译和类型检查,但 TypeScript 7 暂未提供稳定的编程 API。ts-loader 和 typescript-eslint 等工具仍需通过编程 API 调用编译器,因此暂时依赖 TypeScript 6。

为帮助现有工具平稳过渡,TypeScript 团队发布了 @typescript/typescript6 兼容包。该兼容包可以让 TypeScript 7 的 tsc 与依赖 TypeScript 6 API 的工具并行运行。具体背景参阅 TypeScript 7.0 发布公告

本项目据此并行安装两个版本:

  • @typescript/nativetypescript@7.0.2 的别名,负责 tsc、直接构建、监听和类型检查。
  • typescript@typescript/typescript6@6.0.2 的别名,向 webpack、ts-loader 和 typescript-eslint 提供兼容 API。该依赖还提供 tsc6 命令,对应的编译器版本为 6.0.3。

安装开发依赖:

npm install --save-dev \
  "@eslint/js@^9.39.5" \
  "@typescript/native@npm:typescript@7.0.2" \
  "eslint@^9.39.5" \
  "eslint-config-prettier@^10.1.8" \
  "prettier@^3.9.6" \
  "ts-loader@^9.6.2" \
  "typescript@npm:@typescript/typescript6@6.0.2" \
  "typescript-eslint@^8.67.0" \
  "webpack@^5.109.2" \
  "webpack-cli@^7.2.2"

安装完成后,package.json 会包含以下开发依赖:

{
   
  "devDependencies": {
   
    "@eslint/js": "^9.39.5",
    "@typescript/native": "npm:typescript@7.0.2",
    "eslint": "^9.39.5",
    "eslint-config-prettier": "^10.1.8",
    "prettier": "^3.9.6",
    "ts-loader": "^9.6.2",
    "typescript": "npm:@typescript/typescript6@6.0.2",
    "typescript-eslint": "^8.67.0",
    "webpack": "^5.109.2",
    "webpack-cli": "^7.2.2"
  }
}

随后,可以检查两个编译器的版本:

npm exec -- tsc --version
npm exec -- tsc6 --version

预期输出:

Version 7.0.2
Version 6.0.3

配置 TypeScript 7

package.json 中声明 ESM,并设置项目的入口文件和发布内容:

{
   
  "type": "module",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "files": ["dist", "src"]
}

创建 tsconfig.json:

{
   
  "compilerOptions": {
   
    "rootDir": "src",
    "outDir": "dist",
    "module": "NodeNext",
    "target": "ES2023",
    "types": [],
    "sourceMap": true,
    "inlineSources": true,
    "declaration": true,
    "declarationMap": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "strict": true,
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "noUncheckedSideEffectImports": true,
    "moduleDetection": "force",
    "skipLibCheck": true
  },
  "include": ["src/**/*.ts"],
  "exclude": ["node_modules", "dist"]
}

tsconfig.json 是 TypeScript 7 直接构建和 webpack 构建共用的项目配置。NodeNext 会结合 package.json 中的 "type": "module" 判断模块格式,使 dist/index.js 保持 ESM 格式。

编写并编译 TypeScript

创建 src/index.ts:

const ProjectName = "new-typescript-project";

function say(): string {
   
  return `This project is ${
     ProjectName}.`;
}

console.log(say());

package.json 中定义直接构建、监听和类型检查脚本:

{
   
  "scripts": {
   
    "build:ts": "tsc --project tsconfig.json",
    "watch": "tsc --project tsconfig.json --watch",
    "typecheck": "tsc --project tsconfig.json --noEmit"
  }
}

运行直接构建:

npm run build:ts

TypeScript 7 会生成 dist/index.js、声明文件、声明映射和源码映射。dist/index.js 的内容如下:

const ProjectName = "new-typescript-project";
function say() {
   
    return `This project is ${
     ProjectName}.`;
}
console.log(say());
export {
   };
//# sourceMappingURL=index.js.map

运行编译结果:

node dist/index.js

输出如下:

This project is new-typescript-project.

开发期间可以启动监听模式:

npm run watch

只检查类型而不写入文件:

npm run typecheck

使用 webpack 打包

对于当前 Node.js 项目,TypeScript 7 直接编译已经足够。webpack 是一条可选的构建路径。

tsc 负责类型检查和 JavaScript 编译,也会生成声明文件与源码映射。在本项目的 NodeNext 配置下,tsc 会保留模块边界,不会把入口文件及其依赖合并为单个文件。

webpack 会从入口开始分析模块依赖,并将项目代码和引用的模块合并为 dist/bundle.js。对于包含多个模块或第三方依赖的应用,单文件通常更便于交付。

配置相应的 loader 或 plugin 后,webpack 还可以处理 CSS、图片等资源。本文没有启用这些能力。

webpack 通过 ts-loader 加载 TypeScript。ts-loader 会从名为 typescript 的依赖中获取 TypeScript 6 兼容 API。webpack 仍使用同一个 tsconfig.json。更多配置方式请参阅 webpack TypeScript 指南

创建 ESM 格式的 webpack.config.js:

import path from "node:path";
import {
    fileURLToPath } from "node:url";

const currentDirectory = path.dirname(fileURLToPath(import.meta.url));

export default {
   
  mode: "production",
  entry: "./src/index.ts",
  devtool: "source-map",
  output: {
   
    filename: "bundle.js",
    path: path.resolve(currentDirectory, "dist"),
  },
  module: {
   
    rules: [
      {
   
        test: /\.tsx?$/,
        use: {
   
          loader: "ts-loader",
          options: {
   
            compilerOptions: {
   
              declaration: false,
              declarationMap: false,
            },
          },
        },
        exclude: /node_modules/,
      },
    ],
  },
  resolve: {
   
    extensions: [".ts", ".tsx"],
  },
};

webpack 构建会关闭声明文件输出。包文件和声明文件仍由 TypeScript 7 直接构建生成。

添加 webpack 构建脚本:

{
   
  "scripts": {
   
    "build:webpack": "webpack --config webpack.config.js"
  }
}

运行构建并执行生成的 bundle:

npm run build:webpack
node dist/bundle.js

webpack 会同时生成 dist/bundle.jsdist/bundle.js.map

配置 ESLint

ESLint 使用 flat config,并组合 @eslint/js 和 typescript-eslint 的推荐规则。具体配置方式参阅 typescript-eslint 入门指南

运行检查:

npm run lint

完整验证项目

check 是仓库健康检查。该脚本会依次检查格式、代码质量和类型,然后运行两条构建路径:

{
   
  "scripts": {
   
    "check": "npm run format:check && npm run lint && npm run typecheck && npm run build:ts && npm run build:webpack"
  }
}

执行完整检查:

npm run check

构建完成后,分别运行两个文件并比较输出:

node dist/index.js
node dist/bundle.js

两个命令都应输出:

This project is new-typescript-project.

参考资料

附录

案例: github.com/chengchuu/new-typescript-project

版权声明

本文为原创文章,作者保留版权。转载请保留本文完整内容,并以超链接形式注明作者及原文出处。

作者: 除除
原文: https://blog.mazey.net/6532.html

目录
相关文章
|
18天前
|
人工智能 缓存 前端开发
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
DeepSeek Harness + DeepSeek V4 Pro 项目实战保姆级教程!手把手带你从零安装开源 AI 编程工具,开发架构图、知识讲解网站、3D 网页游戏、全栈 AI 应用 4 个项目,覆盖运行模式选择、插件安装与开发,看看能不能对标 Claude。
12934 81
DeepSeek Harness 首发实测 + 入门教程,夯爆了!梁神我错了
|
6天前
|
人工智能 自然语言处理 安全
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
本文聚焦阿里云2026年推出的三款自研AI办公产品,清晰拆解千问办公、Qoder Teams、Qoder CN的差异化定位与能力边界:千问办公主打职场全场景提效,支持自然语言指令一键完成PPT生成、数据分析等高频办公任务;Qoder Teams面向程序员团队,深度整合AI代码生成、团队协同与企业知识库能力;Qoder CN则专为金融、政务等强合规场景打造,实现数据不出境与VPC私有化部署。文章同步给出分场景选型指南与最新活动定价,帮助不同类型的企业按需组合产品,实现业务岗、研发岗与强合规场景的AI能力全覆盖。
阿里云千问办公、Qoder Teams、Qoder CN区别与选择指南:模型能力、适用场景与最新活动参考
|
11天前
|
Web App开发 人工智能 API
16 个超火的 DeepSeek Harness 插件,大肥鱼已经落后 N 个版本了。。。
DeepSeek Harness 精选插件推荐合集,从图片识别、浏览器操控、多 Agent 协作到手机远程控制,一口气带你看完 DSH 社区热门的十几个插件,覆盖技能扩展、UI 界面增强、整活玩法三大类,让你的鲸鱼变得更强。
1656 3
|
人工智能 JavaScript 开发工具
DeepSeek Harness 本地安装与使用指南
DeepSeek Harness(DSH)是DeepSeek AI开源的Agent运行框架,支持本地文件操作、命令执行与工具调用。基于Cordis插件架构,具备高扩展性与强可控性,适合开发者搭建可控Agent环境或开展模型基准测试。当前为开发者预览版,需Node.js环境,推荐先用`npx @deepseek-ai/dsh web`快速体验。
5062 0
|
12天前
|
人工智能 Java BI
【AI】DeepSeek Harness 安装、运行、管理插件
本文介绍了如何运行DeepSeek开源的Agent框架DeepSeek Harness(dsh)。主要内容包括:使用nvm安装适配的Node版本;通过代理加速克隆GitHub源码;使用pnpm安装依赖并启动项目;配置DeepSeek API Token;安装扩展功能的插件。该框架自带Web界面,支持模型适配、文件编辑等插件化功能
1801 1
|
14天前
|
人工智能 JavaScript 测试技术
保姆级教程:DeepSeek Harness从安装到跑通测试,30分钟上手
DeepSeek Harness是DeepSeek开源的AI Agent运行时,主打“一行命令安装、5分钟跑通”。它让模型真正动手干活——读代码、跑测试、分析失败、生成修复方案。本文手把手教你30分钟从零上手,覆盖安装、配置、实测及避坑指南,助你快速掌握下一代AI编程范式。
|
16天前
|
开发工具 Swift git
DeepSeek Harness 插件推荐:4 款开源神器让写代码直接起飞
DeepSeek Harness 插件推荐:ModLens 视觉、Web UI 全家桶、Mac 原生与 GenUI 渲染,4 款开源插件给纯文本模型补齐短板。
2035 6
DeepSeek Harness 插件推荐:4 款开源神器让写代码直接起飞
|
13天前
|
人工智能 JavaScript 测试技术
从 0 到 1,DeepSeek Harness 保姆级安装与使用教程!
DeepSeek Harness是DeepSeek推出的开源Agent运行框架,秉持“一切皆插件”理念,支持模型、工具、技能、工作流等全模块自由替换与扩展。其核心Cordis内核实现动态插件管理,赋能Agent自进化。已成GitHub史上增速最快开源项目(15w+ Star),标志着国内大模型从拼价格转向重架构与生态的新拐点。
1311 5
从 0 到 1,DeepSeek Harness 保姆级安装与使用教程!