如何在节点中导入的js文件中获取当前路径

时间:2018-02-24 13:20:31

标签: javascript node.js node-modules

我有2个文件A.jsB.js,其结构如下:

packgages
|
 – B
   |
    - B.js
A.js

在我的A.js我只是这样做:

import B.js

在我的B.js我想知道此文件的完整路径(B.js):

console.log(__dirname);

因此,如果我执行cd packages/B; node B.js,我会得到以下结果:

/Users/luke/Projekte/writejs/code/verne/packages/B

但如果我超越node A.js,我就明白了:

/Users/luke/Projekte/writejs/code/verne

看到__dirname没有引用它所调用的文件,而是引用在其根目录中执行它的文件。

有没有办法获得/packages/B的完整路径,无论我从哪个文件导入它?

1 个答案:

答案 0 :(得分:0)

我从未使用Rollup,但从我在页面上的介绍中可以理解的,其目的是将ES6脚本转换为单个js文件。如果有以下文件:

<强> moduleA.js

import p from "./myModules/moduleB";

console.log(__dirname);
console.log(__filename);

p();

<强> myModules / moduleB.js

export default function () {
  console.log(__dirname);
  console.log(__filename);
}

在moduleA.js上执行Rollup时

rollup -i moduleA.js -f cjs -o rollup.js 

我获得以下文件:

<强> rollup.js

'use strict';

function p () {
  console.log(__dirname);
  console.log(__filename);
}

console.log(__dirname);
console.log(__filename);

p();

如您所见,对先前结构的任何引用都消失了。此外,所有内容都在一个文件中,因此目录不会更改。

我还试图在创建Rollup bundle时找到一种维护目录结构的方法,但是找不到任何解决方案。