如果我将模块发布到 npm,fs 不会获取文件

fs doesn't get file if i publish module to npm

我在将模块发布到 npm 时遇到问题。

文件结构如下:

- node_modules
- lib
  -- file.txt
- index.js
- package.json

我是这样用的:

var a = fs.readFileSync('./lib/file.txt');

它适用于本地开发。但是当我将我的模块发布到 npm 时,它说:

Error: ENOENT, no such file or directory './lib/file.txt'

这个错误来自fs,它没有获取文件。是关于嵌套的 node_modules 文件夹吗?

我的意思是当我想在透明文件夹中测试我的模块时,我安装模块:

npm install <my-module-name>

正在创建一个 test.js 文件并将代码放入其中:

var myModuleName = require('my-module-name');

var a = myModuleName();

console.log(a);

所以新结构变成:

- node_modules
  -- my-module-name
     -- node_modules
     -- lib
        -- file.txt
     -- index.js
     -- package.json
- test.js

有什么想法吗?

这是因为fs.readFileSync正在查找与当前工作目录相关的文件。尝试使用 __dirname:

var path = require('path');

var a = fs.readFileSync(path.join(__dirname, 'lib', 'file.txt'));