使用 ES6 模块替代 require.main.filename

问题描述 投票:0回答:2

如何使用ES6获取主文件的路径url? 就像在 NodeJS 中一样,我们有

require.main.filename
import 也有类似的东西吗?

javascript node.js ecmascript-6
2个回答
0
投票

依赖注入

@jfriend00 建议你可以使用

process.argv[1]
,但提到它有一个限制,如果你在运行
node
时不输入扩展名,
process.argv[1]
也不会拥有它

我相信你可以使用

require.resolve
解决第二个问题,但是你需要从 CommonJS 脚本进行依赖注入,因为 ES6 模块没有定义
require

任一解决方案的结果:

> node main

.../path/to/main.js

注射
require.resolve()

main.js:

import( `file://${__dirname}\\module.mjs` )
  .then( r => r.default( require.resolve ) )

async ()=>{
  await import( `file://${__dirname}\\module.mjs` )
    .default( require.resolve )
}

模块.mjs

export default function( resolve ){
  console.log( resolve( process.argv[1] ) )
}

或者,注射
require
并使用
require.main.filename

main.js:

import( `file://${__dirname}\\module.mjs` )
  .then( r => r.default( require ) )

async ()=>{
  await import( `file://${__dirname}\\module.mjs` )
    .default( require )
}

模块.mjs

export default function( r ){
  console.log( r.main.filename )
}

-1
投票

我在使用 NodeJS 时遇到了类似的问题。为了解决这个问题,我做了

process.cwd()

© www.soinside.com 2019 - 2024. All rights reserved.