从零到一: 创建一个 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/native 是 typescript@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.js 和 dist/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

目录
相关文章
|
2月前
|
存储 人工智能 JSON
「它凭什么这么说」—— Semantica 让 AI 的每个结论都能翻回出处
Semantica 是面向 AI 系统的开源知识图谱与决策溯源平台,专注解决“AI 决策不可追溯”痛点。它不存向量,而构建可审计的上下文图,支持实体消歧、确定性推理、W3C 标准溯源与因果路径追踪,让每条结论均可查来源、验逻辑、担责任。
|
1月前
|
人工智能 前端开发 NoSQL
又一个 AI 新项目完结,用 DeepSeek 搞了个 PPT 生成器!
手把手带你用 AI 编程做出一个能上线传播、能变现的 AI 智能 PPT 制作工具产品!最新 AI Agent 应用开发 + Vibe Coding 项目,基于 Python FastAPI + LangChain + LangGraph + React 开发,秋招简历亮点拉满~
196 3
|
1月前
|
人工智能 JSON API
阿里云百炼CLI安装与配置教程参考:调用 CLI,让AI Agent自动调度10+项模型应用能力
本文介绍了阿里云百炼CLI——一款专为AI Agent生态打造的命令行工具。通过极简的三步接入(安装、鉴权、使用),开发者可将百炼平台强大的多模态AI能力无缝集成至Claude Code、Cursor等主流开发环境。文章详解安装配置流程,并提供了从电商套图生成、新闻播客制作到故事书创作等实战场景的命令示例与参数解析。CLI支持文本对话、图像生成与编辑、视频生成与编辑、语音合成与识别、联网搜索、知识库检索等10余项核心功能,提供覆盖模型调用、应用管理、记忆存储的全链路命令集,大幅降低了开发者构建复杂多模态AI应用的技术门槛与集成成本。
|
1月前
|
人工智能 JavaScript API
从0到1,DeepSeek Harness保姆级安装与实操完整教程
2026年8月AI领域迎来一波密集更新浪潮,多款大模型与智能体框架集中对外发布。DeepSeek不仅更新V4 Pro正式版本,补齐Agent工具调用、链式任务执行与软件工程相关能力,还正式开源DeepSeek Harness智能体运行框架。该项目凭借“一切皆插件”的创新设计理念,上线之后快速收获大量开发者关注,短短数天GitHub Star突破15万,成为平台历史上增长速度最快的开源项目之一,也标志着国内大模型行业的竞争逻辑,逐步从单纯比拼模型调用价格,转向底层架构、插件生态与智能体执行能力的综合比拼。
1393 2
|
2月前
|
NoSQL 前端开发 安全
零成本邮件验证码全链路拆解,附最新 QQ 邮箱 SMTP 授权码完整步骤
本文详解个人项目“词帆CiFan”中邮件验证码功能的完整实现:选用QQ邮箱SMTP零成本方案,涵盖密码重置与账号注销两大核心场景,包含前后端链路设计、Redis降级容错、安全配置避坑(如授权码获取、端口选择、环境变量保护)及AI辅助开发技巧。
248 0
零成本邮件验证码全链路拆解,附最新 QQ 邮箱 SMTP 授权码完整步骤
|
29天前
|
XML 人工智能 前端开发
刚刚 DeepSeek V4.1 Flash 正式发布,竟然干掉了自家的 Pro 模型?!梁圣回归
DeepSeek V4.1 Flash 模型发布,DeepSeek V4 Pro 模型被彻底淘汰了!2 大实战项目测试,对比 GLM-5.3-Flash,看看新模型的效果如何,适不适合作为 AI 编程和办公的首选模型?
907 0
|
2月前
|
人工智能 自然语言处理 Linux
Claude Code 实现 Computer Use:让 AI 操控你的 Windows 电脑(MCP 平替方案)
本文介绍如何用开源Windows Control MCP插件,让Claude Code(无需Pro订阅)实现99%官方Computer Use功能:鼠标控制、键盘输入、截图等。仅需两行命令,兼容VS Code与CLI,专为国内用户优化,全免费、全可用。
436 0
|
6月前
|
人工智能 弹性计算 自然语言处理
阿里云学生算力包:大学生上云练手、做毕设、玩 AI 的全能方案
阿里云推出“学生算力包”,19元起享灵活按小时抵扣的云资源,支持一键部署AI简历、个人网站等实战项目;深度联动清华、浙大等数十所高校,提供课程、实训营与赛事支持,助力学生低成本入门AI开发与云实践。
788 9
|
监控 Linux 应用服务中间件
linux查看日志文件tail -f用法
在 Linux 中,查看和监控日志文件是系统管理员和开发者常用的操作之一。tail 命令就是用来查看文件内容的,它默认显示文件的最后部分。tail -f 是 tail 命令的一个非常有用的选项,用于实时查看和跟踪日志文件的更新,尤其是在监控运行中的服务时非常有用。
1516 0