当前位置: 首页 > article >正文

nodejs module.createRequire

import.meta.url

import.meta.url 是 Node.js 中一个全局变量,用于获取当前模块文件的 URL。
在 ES6 模块中,使用 import 导入模块时,每个模块都有一个 import.meta 对象,它包含了一些有用的元数据,其中就包括 url 属性。
import.meta.url 可以返回一个指向当前模块文件的完整 URL。这个 URL 是一个文件路径的字符串,其中包含了文件所在的协议、主机名、端口号和路径等信息。可以通过这个 URL 来获取当前模块的位置,也可以用它来加载其他资源。
以下是一个简单的例子,展示了如何使用 import.meta.url 获取当前模块的 URL:

// index.js
console.log(import.meta.url);

当我们运行这个脚本时,它会输出当前模块的 URL:

file:///home/user/projects/myapp/index.js

需要注意的是,在 CommonJS 模块中,是没有 import.meta 这个对象的,因此也就无法使用 import.meta.url 这个属性了。但是可以通过其他的方式来获取模块的路径信息,例如使用 __filename 和 __dirname 等全局变量。

module.createRequire

新建package.json

{
  "name": "nodestu",
  "version": "1.0.0",
  "main": "index.js",
  "description": "node study",
  "author": "wjl",
  "license": "MIT",
  "private": true,
  "type": "module",
  "keywords": [
    "node"
  ],
  "debug": {
    "env": {
      "VITE_DEV_SERVER_URL": "http://127.0.0.1:3344/"
    }
  },
  "scripts": {
    "dev": "vite",
    "build": "vue-tsc --noEmit && vite build && electron-builder",
    "preview": "vite preview"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.3.3",
    "electron": "^26.0.0",
    "electron-builder": "^24.6.3",
    "typescript": "^5.1.6",
    "vite": "^4.4.9",
    "vite-plugin-electron": "^0.14.0",
    "vite-plugin-electron-renderer": "^0.14.5",
    "vue": "^3.3.4",
    "vue-tsc": "^1.8.8"
  }
}

新建index.js

import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
console.log(import.meta.url)
//file:///E:/Desktop/index.js
//加载package.json
const siblingModule = require('./package.json'); 
console.log(siblingModule)
/*
{
  name: 'nodestu',
  version: '1.0.0',
  main: 'index.js',
  description: 'node study',
  author: 'wjl',
  license: 'MIT',
  private: true,
  type: 'module',
  keywords: [ 'node' ],
  debug: { env: { VITE_DEV_SERVER_URL: 'http://127.0.0.1:3344/' } },
  scripts: {
    dev: 'vite',
    build: 'vue-tsc --noEmit && vite build && electron-builder',
    preview: 'vite preview'
  },
  devDependencies: {
    '@vitejs/plugin-vue': '^4.3.3',
    electron: '^26.0.0',
    'electron-builder': '^24.6.3',
    typescript: '^5.1.6',
    vite: '^4.4.9',
    'vite-plugin-electron': '^0.14.0',
    'vite-plugin-electron-renderer': '^0.14.5',
    vue: '^3.3.4',
    'vue-tsc': '^1.8.8'
  }
}
*/
console.log(siblingModule.debug.env)
//{ VITE_DEV_SERVER_URL: 'http://127.0.0.1:3344/' }

http://www.kler.cn/a/136966.html

相关文章:

  • 记一次Maven拉不了包的问题
  • Kafka可视化工具 Offset Explorer (以前叫Kafka Tool)
  • H3C交换机远程登录基本配置
  • 从AI换脸到篡改图像,合合信息如何提升视觉内容安全?
  • ML-Agents 概述(二)
  • 使用TC命令模拟弱网丢包
  • 六要素一体微型气象站介绍
  • 【图数据库实战】图数据库基本概念
  • 1688开放平台API接口获取商品详情信息
  • 广东网络广播电视台《明星小主播》栏目开拍 小主持神采奕奕
  • 【ARM AMBA AXI 入门 13 -- AXI 协议中 RRESP 信号详细介绍】
  • Spring Boot 自动配置
  • Spring Boot简介
  • html 菜单点击切换样式,菜单<a> 控制iframe
  • Codesys扩展数据类型Any的探索
  • Java WebSocket 获取客户端 IP 地址
  • SAP的一些当说不说的常识
  • KT142C语音芯片搭配HAA2018功放,两个板子,一个声音正常一个没有声音
  • 力扣刷题第二十六天--二叉树
  • seleninum 基础及简单实践
  • Unity 中 TextMesh Pro 认识学习
  • 每天分享五款工具,让大家工作生活更顺心
  • xpath
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(十五)
  • ISP概念入门
  • java中的接口