我做了create-react-app并安装了sequelize和pg。但是当我执行npm start时,出现以下错误-
./ node_modules / pg / lib / connection-parameters.js
这是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安装,但是没有运气。
谢谢。
答案 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' 。