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/' }

你可能感兴趣的:(js,vue.js,前端,javascript)