自己怎么做网站啊长春市防疫最新规定

news/2025/9/22 17:32:28/文章来源:
自己怎么做网站啊,长春市防疫最新规定,陕西网站建设公司,yw193can未满十免费观看在 node 环境中#xff0c;有两个内置的全局变量无需引入即可直接使用#xff0c;并且无处不见#xff0c;它们构成了 nodejs 的模块体系: module 与 require。以下是一个简单的示例const fs require(fs)const add (x, y) x ymodule.exports add虽然它们在平常使用…在 node 环境中有两个内置的全局变量无需引入即可直接使用并且无处不见它们构成了 nodejs 的模块体系: module 与 require。以下是一个简单的示例const fs require(fs)const add (x, y) x ymodule.exports add 虽然它们在平常使用中仅仅是引入与导出模块但稍稍深入便可见乾坤之大。在业界可用它们做一些比较 trick 的事情虽然我不大建议使用这些黑科技但稍微了解还是很有必要。如何在不重启应用时热加载模块如 require 一个 json 文件时会产生缓存但是重写文件时如何 watch如何通过不侵入代码进行打印日志循环引用会产生什么问题module wrapper当我们使用 node 中写一个模块时实际上该模块被一个函数包裹如下所示:(function(exports, require, module, __filename, __dirname) {// 所有的模块代码都被包裹在这个函数中const fs require(fs)const add (x, y) x ymodule.exports add }); 因此在一个模块中自动会注入以下变量exportsrequiremodule__filename__dirnamemodule调试最好的办法就是打印我们想知道 module 是何方神圣那就把它打印出来const fs require(fs)const add (x, y) x ymodule.exports addconsole.log(module) module.id: 如果是 . 代表是入口模块否则是模块所在的文件名可见如下的 koamodule.exports: 模块的导出module.exports 与 exports❝ module.exports 与 exports 有什么关系 ❞从以下源码中可以看到 module wrapper 的调用方 module._compile 是如何注入内置变量的因此根据源码很容易理解一个模块中的变量exports: 实际上是 module.exports 的引用require: 大多情况下是 Module.prototype.requiremodule__filename__dirname: path.dirname(__filename)// node_internals/internal/modules/cjs/loader.js:1138Module.prototype._compile function(content, filename) {// ...const dirname path.dirname(filename);const require makeRequireFunction(this, redirects);let result;// 从中可以看出exports module.exportsconst exports this.exports;const thisValue exports;const module this;if (requireDepth 0) statCache new Map();if (inspectorWrapper) {result inspectorWrapper(compiledWrapper, thisValue, exports,require, module, filename, dirname);} else {result compiledWrapper.call(thisValue, exports, require, module,filename, dirname);}// ... } require通过 node 的 REPL 控制台或者在 VSCode 中输出 require 进行调试可以发现 require 是一个极其复杂的对象从以上 module wrapper 的源码中也可以看出 require 由 makeRequireFunction 函数生成如下// node_internals/internal/modules/cjs/helpers.js:33function makeRequireFunction(mod, redirects) {const Module mod.constructor;let require;if (redirects) {// ...} else {// require 实际上是 Module.prototype.requirerequire function require(path) {return mod.require(path);};}function resolve(request, options) { // ... }require.resolve resolve;function paths(request) {validateString(request, request);return Module._resolveLookupPaths(request, mod);}resolve.paths paths;require.main process.mainModule;// Enable support to add extra extension types.require.extensions Module._extensions;require.cache Module._cache;return require; } ❝ 关于 require 更详细的信息可以去参考官方文档: Node API: require ❞require(id)require 函数被用作引入一个模块也是平常最常见最常用到的函数// node_internals/internal/modules/cjs/loader.js:1019Module.prototype.require function(id) {validateString(id, id);if (id ) {throw new ERR_INVALID_ARG_VALUE(id, id,must be a non-empty string);}requireDepth;try {return Module._load(id, this, /* isMain */ false);} finally {requireDepth--;} } 而 require 引入一个模块时实际上通过 Module._load 载入大致的总结如下如果 Module._cache 命中模块缓存则直接取出 module.exports加载结束如果是 NativeModule则 loadNativeModule 加载模块如 fs、http、path 等模块加载结束否则使用 Module.load 加载模块当然这个步骤也很长下一章节再细讲// node_internals/internal/modules/cjs/loader.js:879Module._load function(request, parent, isMain) {let relResolveCacheIdentifier;if (parent) {// ...}const filename Module._resolveFilename(request, parent, isMain);const cachedModule Module._cache[filename];// 如果命中缓存直接取缓存if (cachedModule ! undefined) {updateChildren(parent, cachedModule, true);return cachedModule.exports;}// 如果是 NativeModule加载它const mod loadNativeModule(filename, request);if (mod mod.canBeRequiredByUsers) return mod.exports;// Dont call updateChildren(), Module constructor already does.const module new Module(filename, parent);if (isMain) {process.mainModule module;module.id .;}Module._cache[filename] module;if (parent ! undefined) { // ... }let threw true;try {if (enableSourceMaps) {try {// 如果不是 NativeModule加载它module.load(filename);} catch (err) {rekeySourceMap(Module._cache[filename], err);throw err; /* node-do-not-add-exception-line */}} else {module.load(filename);}threw false;} finally {// ...}return module.exports; }; require.cache「当代码执行 require(lib) 时会执行 lib 模块中的内容并作为一份缓存下次引用时不再执行模块中内容」。这里的缓存指的就是 require.cache也就是上一段指的 Module._cache// node_internals/internal/modules/cjs/loader.js:899require.cache Module._cache; 这里有个小测试:❝ 有两个文件: index.js 与 utils.js。utils.js 中有一个打印操作当 index.js 引用 utils.js 多次时utils.js 中的打印操作会执行几次。代码示例如下 ❞「index.js」// index.js// 此处引用两次 require(./utils) require(./utils) 「utils.js」// utils.js console.log(被执行了一次) 「答案是只执行了一次」因此 require.cache在 index.js 末尾打印 require此时会发现一个模块缓存// index.jsrequire(./utils) require(./utils)console.log(require) 那回到本章刚开始的问题❝ 如何不重启应用热加载模块呢 ❞答「删掉 Module._cache」但同时会引发问题如这种 一行 delete require.cache 引发的内存泄漏血案所以说嘛这种黑魔法大幅修改核心代码的东西开发环境玩一玩就可以了千万不要跑到生产环境中去毕竟黑魔法是不可控的。总结模块中执行时会被 module wrapper 包裹并注入全局变量 require 及 module 等module.exports 与 exports 的关系实际上是 exports module.exportsrequire 实际上是 module.requirerequire.cache 会保证模块不会被执行多次不要使用 delete require.cache 这种黑魔法关注我❝ 本文收录于 GitHub 山月行博客: shfshanyue/blog内含我在实际工作中碰到的问题、关于业务的思考及在全栈方向上的学习前端工程化系列Node进阶系列 ❞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gentoo安装配置

Gentoo安装配置如何在VMware虚拟机中安装Gentoo Linux 环境准备 - 内存:4G - 硬盘:30G - CPU:4核 - 启动方式:UEFI- 显示:打开3D加速,有些桌面环境,例如Hyprland需要启用安装镜像以及stage文件下载链接 最小安装介质…

当写脚本循环更新几百万数据发现很慢怎么办 - 孙龙

当写脚本循环更新几百万数据发现很慢怎么办1. 核心逻辑:CASE WHEN条件更新UPDATE table SET order_items_id = CASE WHEN stock_out_item_id = 1 THEN 100WHEN stock_out_item_id = 2 THEN 200ELSE order_items_id E…

2025年9月Java后端招聘市场技术风向标:666份招聘数据深度解读

2025年9月Java后端招聘市场技术风向标:666份招聘数据深度解读作为一名开发者或技术决策者,你是否想知道当前企业最需要什么技术?为了回答这个问题,我们分析了2025年9月从BOSS直聘平台收集的666份Java后端开发相关的…

服装采购跟单系统的高效管理实践 - 详解

服装采购跟单系统的高效管理实践 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

和汽车相关的国内期刊

永远渴望,大智若愚(stay hungry, stay foolish)

自己建网站写小说可行吗网站界面设计和ios移动界面设计的区别

1.注册建造师应当在相应的岗位上执业。但同时,国家鼓励和提倡注册建造师( )。 A.一师多岗 B.一师全岗 C.一师专岗 D.专岗专职 正确 正确答案:左边查询 学生答案:A 2.下列规范性文件中,效力最高的是( )。 A.地方性法规 B.行政法规 C.行政规章…

小企业网站推广设计国外网站有哪些

esb 和 开源esbJavaOne 2015即将结束,这又是一次很棒的社区活动。 我和Rafael进行了两次会议和一次HOL 。 我最喜欢的会议之一实际上是:谈论ESB,如果今天完成的话。 我以为那是过去? 我通常也倾向于这样说。 但是,系统…

北京网站优化流程适合新手做的小生意

题目描述 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…

营口网站优化网站建设与网页制作盒子模型

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

价格划算的东莞建网站公司桂林什么公司做网站推广好

深入理解 Spring Boot:核心知识与约定大于配置原则 简单说一下为什么要有 Spring Boot? 因为 Spring 的缺点。 虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的(需要大量 XML 配置) 为了减少配置文件,简化开发 Spri…

苏州哪个公司做门户网站成都建好的网站出租

2019独角兽企业重金招聘Python工程师标准>>> list Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 比如,列出班里所有同学的名字,就可以用一个list表示: >…

做网站后台的电子文库无锡微信网站定制

javafx 使用像我这样的JavaFX爱好者反复面对的一个问题是何时(或为什么)使用JavaFX代替HTML(5)。 这是我的两分钱: 如果…,则应使用JavaFX。 …您对坚固性/质量感兴趣。 JavaFX是Java! 您将能…

服务器CPU、内存、磁盘、网络使用率,东方通CPU使用率东方通内存使用率监控脚本

#!/bin/bash # 创建日志目录LOG_DIR="/log"LOG_FILE="$LOG_DIR/jk.txt" # 阈值设置CPU_THRESHOLD=80 # CPU使用率阈值(%)MEM_THRESHOLD=80 # 内存使用率阈值(%)DISK_THRESHOL…

3 网络基础知识+web基础知识+部署Server

3.1网络基础 3.1.1 OSI七层模型 # 一种理论上的网络通信模型,实践中未应用;从底层到上层分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 * 物理层:物理介质传输比特流,如电缆、光缆 * 数据链路…

什么是 AutoModel

什么是 AutoModelAutoModel 加载模型”是指使用 Hugging Face Transformers 库提供的 AutoModel 系列类,根据模型名称自动识别并加载对应的预训练模型结构和权重,从而无需手动指定具体模型类(如 BertModel、GPT2Mod…

深入解析:STM32——WDG看门狗

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

wxpython图形界面_01_最小基本结构

import wx# 创建应用程序对象 app = wx.App()# 创建窗口对象 frm = wx.Frame(None, title=第一个应用程序, size=(800, 600), pos=(200, 50))# 显示窗口 frm.Show()# 进入主事件循环 app.MainLoop()

做网站最小的字体是多少网站租用 凡

介绍Objects Comparer是用于对象比较的工具,c#常见的数据结构都是可以用这个三方库进行对比,比较复杂的对象也是可以比较的。简而言之,Objects Comparer 是一个对象到对象的比较器,它允许逐个成员递归得比较对象,并为某…

漳州建设银行网站首页珠海知业科技

能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就需要互联网技术来方便人们的日常工作生活,实现工作办公的自动化处理,实现信息化,无纸化…

万网网站域名wordpress 黄蓝 现代企业

【ADB全称 Android Debug Bridge】 是Android SDK中的一个命令行工具adb命令可以直接操作管理Android模拟器或真实的Android设备(手机) 建立PC和模拟器连接 # 建立连接 adb connect 127.0.1: 模拟器端口号〈逍遥模拟器21503〉 # 验证是否连接成功 adb d…