NodeJS模块【简单说明】

nodejs模块【简单说明】

什么是模块?

假设您的 nodejs 项目中有一个 index.js 文件,您在其中使用了五个函数。但是,其中两个函数也可能在其他文件中使用。因此,您在项目中创建了三个文件,而不是一个文件:

index.jsdependency1.jsdependency2.js

这里,每个javascript文件都是一个模块,导出类/函数和导入它们的方式基本上是模块系统。模块系统允许我们拆分和包含代码,并在需要时导入我们或其他开发人员编写的代码。

这些模块不仅仅是项目中存在的 javascript 文件;它们也可以是您在项目中作为依赖项安装的任何外部包。另外,nodejs 有一些内置模块,如 http、fs 等,这些模块可以随安装一起使用,并且可以在不添加任何外部依赖项的情况下导入。

如何导出或导入模块?

node.js 中使用了两个模块系统。

commonjs (cjs)ecmascript 模块 (esm)

您已经阅读了我之前博客中的厨房-厨师-服务员示例;同样,如果我们将模块与此进行比较,想象 commonjs 是一本古老的大食谱书,我们需要搜索和查找食谱,而 esm 是一个新的老式数字应用程序来查看食谱。

commonjs (cjs)

旧的模块系统。模块以简单的格式编写,例如:

// exportmodule.exports = function sayhello() {  console.log("hello world!");};// importconst gethello = require("./hello-script.js");sayhello(); // "hello world!"

同步:依次加载模块。仅在 node.js 中工作(不能直接在浏览器中工作)。

ecmascript 模块 (esm)

现代模块系统。模块现在更加结构化:

// exportexport function sayhello() {  console.log("hello world!");}// importimport { sayhello } from "./hello-script.js";sayhello();

异步:同时加载多个模块。在浏览器和 node.js 中原生工作。

语法上的主要区别
cjs: module.exports / require
esm:导出/导入

如何在我的项目中配置 cjs 或 esm?

打开项目的package.json。添加:

{  type: "module";}

这告诉 nodejs 将 .js 解释为 esm。如果我们不添加这个,nodejs 将默认将其解释为 commonjs。

typescript 中的模块:

有时,您可以使用 ecmascript 模块,但您导入的旧包是用 commonjs 编写的。为了处理这些情况,我们有时会确保从 typescript 文件生成的输出 javascript 代码采用通用格式,即使我们已经以 esm 格式编写了 typescript 文件。

为此,我们在项目的 tsconfig.json 中添加编译器选项:

"compileroptions": {  "module": "commonjs",  "target": "es6"}

然后会发生什么:
module: “commonjs”:使用 commonjs 模块系统输出 javascript,该系统使用 require 和 module.exports。
target: “es6″:确保输出 javascript 使用 es6 语法和 let、const 和箭头函数等功能。

输入打字稿代码:

import { readfile } from "fs";const sayhello = () => {  console.log("hello world!");};export { sayhello };

输出javascript代码:

"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.SayHello = void 0;const fs_1 = require("fs");const SayHello = () => {    console.log("Hello World!");};exports.SayHello = SayHello;

以上就是NodeJS模块【简单说明】的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1498914.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 20:53:14
下一篇 2025年12月19日 20:53:24

相关推荐

  • React 开发者完整指南

    这篇文章将有助于理解开始处理项目所需的所有概念。 我们开始吧! (dom) 是 web 文档(页面)的编程接口。 以便程序可以更改文档结构、样式和内容。 dom 将文档表示为节点和对象;这样,编程语言就可以与页面交互。 组件的生命周期?分为三个主要阶段:安装阶段、更新阶段和卸载阶段。mounting…

    2025年12月19日
    000
  • 我对 use() 钩子的思考——深入探讨 React 的最新实验功能

    react 19 已经发布了,它带来了许多新功能,例如服务器组件、指令(使用客户端和使用服务器)、新钩子(例如 useoptimistic()、useformstatus() 和实验性 use()) hook,这就是我今天要讲的内容。 什么是 use() 挂钩? use() 钩子是一项新功能,可让您…

    2025年12月19日
    000
  • Nodejs 中的 Stripe 订阅集成 [终极指南]

    让 stripe 订阅与后端服务配合使用可能会很棘手,并且常常会导致开发人员所谓的可怕的“大脑分裂”——同步管理 stripe 的逻辑和您自己的后端数据。 在 vratix,我们在构建开源 stripe 订阅 api 模块时正面解决了这个问题。以下是我们如何在 node.js 中处理 stripe …

    2025年12月19日
    000
  • React 组件中带有“as”属性的动态 HTML 标签

    假设您正在使用 react 构建一个可重用的 组件。该部分组件呈现一个 html 标记,因为您对其进行了硬编码。 但是,在某些情况下,您可能想使用其他标签,例如 html 标签。 这是一个典型的场景,当您希望 html 更加语义化并且 seo 友好时。 解决方案是让消费者决定应该使用哪个 html …

    2025年12月19日
    000
  • 即时设计如何实现复制透明PNG图片并保留透明效果?

    如何实现即时设计中复制透明png图片 即时设计是一款在线设计工具,允许用户复制带有透明背景的PNG图片。与传统的Clipboard API复制相比,即时设计中的复制方法特别之处在于保留了图片的透明效果。 即时设计复制过程 当用户选择复制一个带有透明背景的元素时,即时设计会在后台执行以下步骤: 将元素…

    2025年12月19日
    000
  • 创建 CLI 来搭建扩展

    在之前的练习中,我们使用 typescript 构建了一个浏览器扩展。这涉及一系列步骤,包括创建 vite 项目并对其进行定制以满足浏览器扩展的特定要求。虽然该过程并不是特别漫长或复杂,但我们可以通过使用 node cli(命令行界面)实现自动化来进一步简化它。如果您是 cli 新手,请让我引导您完…

    2025年12月19日
    000
  • My React Journey: Day 3

    今天,我探索了编程中最重要的概念之一:函数。函数是游戏规则的改变者,因为它们使代码可重用,减少重复的需要。让我来分解一下我学到的东西: 什么是函数?函数是一个可重用代码块,旨在执行特定任务。它有两个主要方面: 声明:这是您创建或定义函数的位置。 function greet(name) { retu…

    2025年12月19日
    000
  • 基于 IT 的热门 CMS 比较(截至 4 月 4 日)

    DecapCMS(以前的 Netlify CMS) 统计数据:16,700 个 GitHub 星星 • 每周约 4 万次下载 • 400 多名贡献者链接:GitHub • NPM • 文档技术堆栈:框架不可知 • TypeScript 部分增长:明星增长 15%,NPM 增长 20%(6 个月)最适…

    2025年12月19日
    000
  • 掌握 TypeScript 模板文字类型:提高代码安全性和表现力

    好吧,让我们进入使用模板文字类型在 typescript 中进行编译时元编程的迷人世界。这个强大的功能使我们能够创建一些非常酷的类型级魔法,使我们的代码更安全、更具表现力。 首先,模板文字类型到底是什么?它们是一种基于字符串文字操作和创建新类型的方法。这就像拥有一种适合您类型的迷你编程语言。很整洁,…

    2025年12月19日
    000
  • React开发:Vite打包和zustand状态管理是最佳选择吗?

    React 生态圈中的打包和状态管理新技术 一位开发者抛出了一个问题,询问 React 社区最近是否有新的打包或状态管理技术值得关注。 打包技术 该开发者目前正在使用 Vite 作为构建工具,并打算抛弃 webpack。社区推荐了 Vite 社区提供的众多 React 模板,其中可以选择最简约的模板…

    2025年12月19日
    000
  • React开发:如何用Vite、React Router和Zustand构建高效应用?

    react 最新打造和状态管理技术 作为一名久经沙场的 React 开发者,最近重拾 React 已成为许多人的当务之急。随着技术的不断发展,了解当前社区的最佳实践至关重要。 打造:抛弃 Webpack,拥抱 Vite Vite 的部署生产能力已经得到验证,因此它已成为构建新项目的最佳选择之一。其快…

    2025年12月19日
    000
  • React开发新趋势:打包工具和状态管理方案该如何选择?

    React 新技术巡礼:打包与状态管理 作为一名长期使用 React 的开发人员,你回到这一领域时可能会面临新技术的选择。本文将探讨 React 生态系统中打包和状态管理领域的最新发展。 打包 你已经提到了 Vite,这是一种备受赞誉的替代品,以其出色的开发体验和生产就绪构建而闻名。在 Vite 社…

    2025年12月19日
    000
  • React开发新趋势:Vite打包和Zustand状态管理好用吗?

    react 社区的打包和状态管理新技术 提问者使用 React 已有四年经验,近期打算重新拾起 React 进行开发,希望了解社区内有哪些好用的打包和状态管理技术。以下是提问者提出的具体问题: 打包技术:是否推荐使用最新的 CLI 推荐?状态管理:在 Vite 环境下,有哪些推荐的替代方案? 回答:…

    2025年12月19日
    000
  • 使用 Cloudflare Workers 实施 Gmail 发送 – 开发指南

    这是使用 cloudflare workers 实施 gmail 发送系列的第 2 部分: 第 1 部分:设置 ✅第 2 部分:开发环境(当前)第 3 部分:实施(即将推出) 介绍 在第 1 部分中设置 gmail api 访问权限后,我们现在将为 cloudflare workers 配置开发环境…

    2025年12月19日
    000
  • Angular’s Biggest Misconception: “It’s Not Worth Learning Due to Fewer Jobs”

    在选择前端框架时,对 Angular 的一个常见误解是学习它不值得,因为“没有足够的工作机会”。让我们揭穿这个神话并探索 Angular 在就业市场中的现实地位。 为什么会存在这种误解? 这种信念源于将 Angular 职位发布数量与 React 进行比较。在许多地区,React 职位的数量通常超过…

    2025年12月19日
    000
  • 处理 Javascript/Typescript 中的错误:自定义异常和结果

    诸如调用 api 或验证用户输入的数据之类的操作在开发中非常常见,并且是可以给出正确结果或失败的函数的示例。一般来说,为了在 javascript(和其他语言)中控制它,我们通常使用并创建简单的异常。 它们似乎是控制我们正在开发的应用程序或程序可能出现的错误的最简单方法。然而,随着项目和团队的成长,…

    2025年12月19日
    000
  • TypeScript项目中:import 和 require 导入模块有何区别?

    typescript 与模块化 在 TypeScript 项目中,我们可以既使用 import 来导入第三方库,也可以通过 require 来引入。这两种方式分别代表了 ES Module 和 CommonJS Module 这两种模块化方式。 在打包构建项目时,我们可以选择将代码打包为 ESM 或…

    2025年12月19日
    000
  • TypeScript项目中如何兼容NodeJS fs模块和ESM导出?

    TypeScript 项目中使用 NodeJS fs 模块与 ESM 导出 在 TypeScript 项目中,可以同时使用 import 和 require 来引入三方库。这两种方式分别用于 ESM(ECMAScript 模块)和 CJS(CommonJS 模块)模块化引入。import 用于 ES…

    2025年12月19日
    000
  • TypeScript项目中使用NodeJS fs模块会如何影响ESM打包?

    在 TypeScript 项目中使用 NodeJS fs 模块对打包成 ESM 模块的影响 在 TypeScript 项目中,确实可以同时使用 import 和 require 语句来引入第三方库。前者用于导入 ESM 模块,而后者用于导入 CJS 模块。两者之间的区别在于,ESM 模块采用 ES6…

    2025年12月19日
    000
  • Node.js项目中TypeScript文件执行失败:ts-node无法识别.ts文件的原因是什么?

    为什么在 nodejs 项目中不能在 typescript 项目 ts-node 执行.ts 文件? 在 typescript 项目中使用 ts-node 执行 .ts 文件时遇到无法识别.ts 文件后缀的错误,该问题可能是由于以下原因造成的: 1. package.json 中 “ty…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信