【问题标题】:Cannot resolve module 'fs' in .../node_modules/geoip-lite/lib无法解析 .../node_modules/geoip-lite/lib 中的模块“fs”
【发布时间】:2017-07-29 23:36:17
【问题描述】:

我正在使用一个带有react-redux-starter-kit模块的项目,我安装了geoip-lite模块,当我导入它时,出现了标题中所说的错误。

ERROR in ./~/geoip-lite/lib/geoip.js
Module not found: Error: Cannot resolve module 'fs' in <path>/node_modules/geoip-lite/lib
 @ ./~/geoip-lite/lib/geoip.js 1:9-22

ERROR in ./~/geoip-lite/lib/fsWatcher.js
Module not found: Error: Cannot resolve module 'fs' in <path>/node_modules/geoip-lite/lib
 @ ./~/geoip-lite/lib/fsWatcher.js 1:9-22

webpack.config.js 文件中,我已经尝试将target 修改为node,而不是默认的web,但是随后出现了下面的警告,并且本地运行的网站全部空白。

WARNING in ./~/encoding/lib/iconv-loader.js
Critical dependencies:
9:12-34 the request of a dependency is an expression
 @ ./~/encoding/lib/iconv-loader.js 9:12-34

我还在文件中添加了node: { fs: 'empty' },但随后屏幕出现了这个错误:

TypeError: fs.openSync is not a function

我尝试在模块中安装 fs 并下载 fs-extra 并将所有出现的 fs 更改为 fs-extra,但根本没有成功。可以做什么?

【问题讨论】:

  • 您是否使用 webpack 在浏览器中运行捆绑代码?因为没有可以在浏览器中运行的全功能fs 模块。
  • 我是。我确实已经看到了这一点,但是执行这些建议会导致我遇到更多问题。
  • 您根本不能在浏览器中使用fs 模块或任何其他依赖于它的模块。浏览器没有该功能的替代品。 webPack 或 browserify 都不能神奇地赋予浏览器文件访问权限(或任何其他本机代码功能)它没有内置。
  • 那为什么会有这样的模块呢?有没有其他选择?
  • fs 模块用于使用 node.js 运行代码,是 node.js 的内置部分。如果您尝试在浏览器等不同的环境中运行代码,那么只有模块的一个子集是适用的。因此,在 NPM 中查找模块时(显然是找到了 geoip-lite 模块,那么您必须找到与浏览器环境兼容的模块。

标签: node.js react-redux fs geoip


【解决方案1】:

尝试在 webpack 配置部分添加 target: 'node' ,如下所示:

var webpackConfig = Object.assign(
  {
    target: 'node',
    ....
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 2021-02-21
    • 2022-01-04
    • 1970-01-01
    • 2021-04-15
    • 2018-07-20
    • 2020-11-05
    相关资源
    最近更新 更多