未找到模块:无法解析 pg/lib 中的“dns”
Posted
技术标签:
【中文标题】未找到模块:无法解析 pg/lib 中的“dns”【英文标题】:Module not found: Can't resolve 'dns' in pg/lib 【发布时间】:2019-01-03 14:39:29 【问题描述】:我做了 create-react-app 并且还安装了 sequelize 和 pg。但是当我执行 npm start 时,出现以下错误 -
./node_modules/pg/lib/connection-parameters.js
找不到模块:无法解析“/Users/vedant/Web Dev/device_psql/node_modules/pg/lib”中的“dns”
这里是 App.js 文件 -
import React, Component from 'react';
const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres', 'postgres', 'password',
host: 'localhost',
dialect: 'postgres',
pool:
max: 5,
min: 0,
acquire: 30000,
idle: 10000
,
// http://docs.sequelizejs.com/manual/tutorial/querying.html#operators
operatorsAliases: false
);
class App extends Component
render()
return (
<div >
<p>Test</p>
</div>
);
export default App;
另外,在 package.json 文件中,我有 sequelize 和 pg。可能是什么问题呢?我试图删除 node_modules 文件夹并进行 npm 安装,但没有成功。
提前致谢。
【问题讨论】:
您应该检查您的 Sequelize 和 pg 版本,我记得 pg@7 与以前版本的 sequelize 不兼容时遇到了一些问题 【参考方案1】:发生这种情况是因为您的某个包使用了 javascript 承诺,该承诺依赖于 dns
模块,该模块仅在 Node.js(服务器端)中可用,而不是在您的代码在浏览器中运行时可用。虽然实现依赖于它,但它并不要求它工作,因此您可以通过伪造dns
模块的存在来解决问题。
为此,请按以下步骤操作:
创建一个文件夹/src/mock/dns
。在此文件夹中,创建一个文件 index.js
,其中包含:
module.exports = ;
module.exports.default = ;
也在这个文件夹中,创建一个文件package.json
,其中包含:
"name": "dns",
"version": "3.1.0",
"private": true
在您的根package.json
中,将以下行添加到dependencies
:
"dns": "file:./src/mock/dns"
运行npm install
安装虚假依赖项,然后使用npm start
重新启动您的React 项目。
【讨论】:
非常感谢亚历山大提供的信息。我能够解决这个问题。我正在使用 React 中的 Sequelize 访问 Postgres,尽管它只能通过后端(在本例中为 Node)访问。【参考方案2】:我在 Cloudflare Workers 中尝试使用 Nodemailer 时遇到了类似的问题。
Nodemailer 包出现以下错误:
Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport'
当我研究错误时,我发现 Webpack 正在尝试为客户端捆绑只能在服务器中使用的东西。见https://github.com/webpack/webpack/issues/744。
解决方案是将externals
属性添加到我的webpack.config.js
文件中,并包含Webpack 无法解析的所有模块。见https://github.com/webpack/webpack/issues/744#issuecomment-320437402。
我的webpack.config.js
文件现在看起来像这样:
module.exports =
target: "webworker",
entry: "./index.js",
externals: [
"child_process",
"dns",
"fs",
"net",
"tls",
]
更新: 我发现了一些专门与 Cloudflare Workers 相关的新信息,但这偏离了最初的主题。所以我创建了一个新帖子:Cloudflare Workers: Module not found: Error: Can't resolve 'child_process' in '~/node_modules/nodemailer/lib/sendmail-transport' 。
【讨论】:
【参考方案3】:在文件顶部导入 fetch 解决了我的问题。
import fetch from 'node-fetch';
之前别忘了安装:Install node-fetch
【讨论】:
以上是关于未找到模块:无法解析 pg/lib 中的“dns”的主要内容,如果未能解决你的问题,请参考以下文章
未找到模块:错误:无法解析“/app”中的“@angular/flex-layout”
Webpack:./src/index.tsx 中的错误模块未找到:错误:无法解析“...”中的“./App”