找不到模块:无法在pg / lib

时间:2018-07-26 14:40:39

标签: node.js reactjs postgresql sequelize.js

我做了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文件中,我有续集和pg。可能是什么问题呢?我试图删除node_modules文件夹并进行npm安装,但是没有运气。

谢谢。

2 个答案:

答案 0 :(得分:5)

之所以会发生这种情况,是因为您的一个程序包使用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项目。

答案 1 :(得分:1)

尝试在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'