【发布时间】: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