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