未找到模块:无法解析 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”

未找到模块:错误:无法解析 | Vue路由器

未找到模块:错误:无法在 webpack.common.js 中解析

./src/App.js 模块未找到:无法解析 xxx 中的“@material-ui/data-grid”