Request: 网络包

创建于 2015-04-06  ·  41评论  ·  资料来源: request/request

我正在尝试使用 Webpack 加载request并看到此错误:

screen shot 2015-04-06 at 13 04 59

我已经看到这应该在使用 browserify 的浏览器中工作,并且很好奇我做错了什么。 也许 browserify 处理依赖项的方式与导致此问题的 webpack 不同。 有任何想法吗?

最有用的评论

同样的问题在这里。

解决方案:安装json-loader以便 webpack 可以处理 *.json 文件。 然后将该加载程序和一个新的node对象添加到您的webpack.config.js如下所示:

$ npm install --save-dev json-loader

webpack.config.js

var path = require('path');

module.exports = {
  entry: 'index',
  output: {
    path: path.join(__dirname, 'scripts'),
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      { test: /\.json$/, loader: 'json-loader' }
    ]
  },
  resolve: {
    extensions: ['', '.webpack.js', '.web.js', '.js']
  },
  node: {
    console: 'empty',
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
  }
};

所有41条评论

+1,也看到了这个

输出:

ERROR in ./~/request/lib/har.js
Module not found: Error: Cannot resolve module 'fs' in /absolute/path/to/project/node_modules/request/lib
 @ ./~/request/lib/har.js 3:9-22

ERROR in ./~/request/~/tunnel-agent/index.js
Module not found: Error: Cannot resolve module 'net' in /absolute/path/to/project/node_modules/request/node_modules/tunnel-agent
 @ ./~/request/~/tunnel-agent/index.js 3:10-24

ERROR in ./~/request/~/tunnel-agent/index.js
Module not found: Error: Cannot resolve module 'tls' in /absolute/path/to/project/node_modules/request/node_modules/tunnel-agent
 @ ./~/request/~/tunnel-agent/index.js 4:10-24

ERROR in ./~/request/~/forever-agent/index.js
Module not found: Error: Cannot resolve module 'net' in /absolute/path/to/project/node_modules/request/node_modules/forever-agent
 @ ./~/request/~/forever-agent/index.js 6:10-24

ERROR in ./~/request/~/forever-agent/index.js
Module not found: Error: Cannot resolve module 'tls' in /absolute/path/to/project/node_modules/request/node_modules/forever-agent
 @ ./~/request/~/forever-agent/index.js 7:10-24

ERROR in ./~/request/~/tough-cookie/lib/cookie.js
Module not found: Error: Cannot resolve module 'net' in /absolute/path/to/project/node_modules/request/node_modules/tough-cookie/lib
 @ ./~/request/~/tough-cookie/lib/cookie.js 23:10-24

ERROR in ./~/request/~/form-data/lib/form_data.js
Module not found: Error: Cannot resolve module 'fs' in /absolute/path/to/project/node_modules/request/node_modules/form-data/lib
 @ ./~/request/~/form-data/lib/form_data.js 7:9-22

ERROR in ./~/request/~/har-validator/~/is-my-json-valid/~/jsonpointer/jsonpointer.js
Module not found: Error: Cannot resolve module 'console' in /absolute/path/to/project/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer
 @ ./~/request/~/har-validator/~/is-my-json-valid/~/jsonpointer/jsonpointer.js 1:14-32

我想到了。 问题是 Webpack 需要一些额外的配置,不像 browserify,因为它更准系统。 请参阅我的示例分支和差异,了解如何让测试成功运行。

https://github.com/request/request/compare/master...pho3nixf1re :webpack-tests

我的计划是将其转化为自己的业力测试并提交 PR,以便其他人可以将其用作示例。 此外,随着开发的进展,它可能会发现未来的问题。

嗯,找到了,谢谢对于偶然发现的其他人,相关的 webpack 文档在这里: http ://webpack.github.io/docs/configuration.html#node

@jaredmcdonald非常感谢:)

@pho3nixf1re如果您使用 webpack 提交有关测试请求的 PR(附加测试,而不是代替 browserify 测试),那就太好了:+1:

是的! 我打算。 我只是在我的分支中替换它作为概念的快速证明。 这个周末我会去做的。

不幸的是,添加 json webpack 加载器并没有为我解决这个问题。

同样的问题在这里。

解决方案:安装json-loader以便 webpack 可以处理 *.json 文件。 然后将该加载程序和一个新的node对象添加到您的webpack.config.js如下所示:

$ npm install --save-dev json-loader

webpack.config.js

var path = require('path');

module.exports = {
  entry: 'index',
  output: {
    path: path.join(__dirname, 'scripts'),
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      { test: /\.json$/, loader: 'json-loader' }
    ]
  },
  resolve: {
    extensions: ['', '.webpack.js', '.web.js', '.js']
  },
  node: {
    console: 'empty',
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
  }
};

添加node: { ... }对象可避免该错误,但随后我无法在浏览器中使用console 。 有没有解决的办法?

我刚刚想通了:

node: {
    console: true
}

这对我来说是一个巨大的帮助。 感谢以上所有。

谢谢大家,我自己碰到了这个。

运气好的话?

我正在使用 webpack & request 并得到了你们都在这里的错误。
使用 json-loader & node 元素尝试了解决方案,但仍然出现错误...

你好。 我需要帮助。 我想将 node js mysql 合并到我的 React 应用程序中。 但是当我运行 webpack 时,我收到错误消息无法解析模块 'net'。
请查看以下代码:

import React from 'react'
import ReactDOM from 'react-dom'
import mysql from 'mysql'

export default class Server extends React.Component{
render(){
return(
<div>
<div>Success Inserting New Data</div>
<div>Company Name: {this.props.name}</div>
<div>Email: {this.props.email}</div>
</div>
);
}
}

var company_data = {
name: 'Company Name Sample',
email: '[email protected]'
};

let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'earnmoredoless'
});

connection.connect();

let sql = connection.query('insert into account set ?', data, function(err, res){

`//success`
`if(!err){`

    `ReactDOM.render(`
        `<Server data={company_data} />,`
        `document.querySelector('#app')`
    `);`

`}else{`

    `console.log('Failed inserting new data.');`
`}`

});

+1
这救了我

+1
已保存!

+1 我自己遇到了dotenv 。 上面的解决方案解决了我的问题。 谢谢!

添加节点{ fs: 'empty' }为我解决了cannot resolve module 'fs'问题,但现在我的控制台出现错误TypeError: fs.readFileSync is not a function 。 我在尝试将dotevwebpack与 es6 babel 转译器一起使用时遇到了这个问题。 如https://github.com/motdotla/dotenv/issues/114 中所述,将 webpack 导入为import 'dotenv/config';

虽然上面的 node {} 解决方案帮助了我的 webpack.config.js,但它破坏了我依赖它的 karma.conf.js,并出现以下错误:

ReferenceError:严格模式禁止隐式创建全局属性“_crypto”

有人解决了这个问题以使用dotenv吗?

我在尝试使用node-soap时遇到了这个问题,这取决于使用 webpack 的 React 应用程序中的request 。 我尝试修改我的 webpack 配置以包含;

node: {
    console: true,
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
  }

如上所述,但这并没有解决我的问题。 我仍然看到这些错误;
screen shot 2016-08-14 at 5 45 02 pm

其他人也看到了同样的问题;
https://gitter.im/vpulim/node-soap/archives/2016/04/13
https://gitter.im/vpulim/node-soap/archives/2016/01/11

据我所知,目前还没有人有解决方案。 我对 webpack 不是很熟悉,但如果还没有其他人有解决方案,如果我有时间,我可能会在本周末尝试剃掉那头牦牛,以便我可以进一步调试。

@kevhuang @sailingthoms @MrOutis@gaearon 你们有没有找到解决方案? 或者你对让node-soap / request与 React 一起工作还需要做什么有什么想法吗? (最好使用create-react-app而不必弹出)。

@screendriver你从哪里得到关于 _node object_ 的信息? 我在文档中没有看到它。

@richburdon , @lucasbento有例子可以帮助你吗?

@garethderioth抱歉,我不记得了。 这很久了。

顺便说一句:同时我正在使用 HTML5 fetch API 和这个polyfill 来处理我的 AJAX 请求。

@garethderioth
@jaredmcdonaldhttps://github.com/request/request/issues/1529#issuecomment -90347445 上面说过

嗯,找到了,谢谢对于偶然发现的其他人,相关的 webpack 文档在这里: http ://webpack.github.io/docs/configuration.html#node

顺便说一句:同时我正在使用 HTML5 fetch API 和这个 polyfill 来处理我的 AJAX 请求。

创建 React App 用户:请注意,CRA 已经包含一个window.fetch polyfill,因此如果它满足您的用例,您可以安全地使用它而不是request

@screendriver @josiahsprague而不是这个:

node: {
    console: true,
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
}

我写:

target: 'node',

它解决了我所有的问题。

编辑:您可以在此处阅读更多相关信息: https :

@gaearon如果某些第三方库需要依赖
在 create-react-app 的存储库中提出问题,正如我从一开始就应该有的那样:/

我上面发布的错误截图无关紧要,这对于阅读这些错误的人来说可能是显而易见的。 😂 无论如何, @pedzed评论中的两种解决方案似乎都适合我。 另一个潜在的解决方案是根据您的情况使用target: 'node-webkit或其他类似的选项

就我而言,我刚刚从node-soap切换到browser-soap ,但这并不适用于所有人。

我有一个与此类似的不同问题,但最终成为 socketio/socket.io-client/issues/933 对于任何可能遇到它的人

+1
谢谢!

我使用@screendriver & @kilometers提供的内容做了一个小改动(谢谢!)。

Webpack 会抱怨如果有一个空的扩展名,但是,我认为这对大多数人来说是不需要的。

````
var path = require('path')
var request = require('请求')
var webpack = require('webpack')

模块.出口 = {
条目:'./src/main.js',
输出: {
路径:path.resolve(__dirname, './dist'),
publicPath: '/dist/',
文件名:'build.js'
},
模块: {
规则: [
{
测试:/.json$/,
装载机:'json-装载机'
}
]
},
解决: {
/扩展名:['.webpack.js', '.web.js', '.js'] /
}
节点:{
控制台:真的,
fs: '空',
净:'空',
tls: '空'
}
}
````

不影响捆绑代码的最佳简单解决方案:

require

对于对storybook有问题并且不想替换 storybook 的原始 webpack 配置的窥视者,您可以通过创建.storybook/webpack.config.js并添加:

// Load the default config generator.
const genDefaultConfig = require('@kadira/storybook/dist/server/config/defaults/webpack.config.js');

module.exports = function (config, env) {
    const newConfig = genDefaultConfig(config, env);

    // Extend to resolve fs issues
    newConfig.node = {
        fs: 'empty'
    };

    return newConfig;
};
  node: {
    console: true,
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
  }

使用上面的代码错误已解决,但

fs.writeFile('/home/react-hello-world/test.txt', 'aaa', function(err) { alert(err); });

fs.writeFile 不起作用请给出任何解决方案。

@chandrasekarb尝试将 fs 设置为 true 而不是“空”

target: 'node',为我工作 :department_store:

我遇到了这个问题,这是因为我正在为服务器端渲染运行双客户端/服务器配置。 服务器端渲染配置被标记为 target: 'node',而客户端配置没有指定。 我在客户端配置中添加了 target: 'web' 并且错误消失了。

此问题已自动标记为过时,因为它最近没有活动。 如果没有进一步的活动发生,它将被关闭。 感谢你的贡献。

Request 现在处于维护模式,不会合并任何新功能或解决此错误。 有关更多信息,请参阅#3142。

我在尝试将jQueryNuxt (或 Node)一起使用时遇到了同样的问题,问题是我导入了jQueryBootstrap并添加了jsdom来解决它,但没有用。 我解决它直接导入库headnuxt.config.js ,另一种方法是设置client mode在nuxt配置的插件,我希望它帮助别人。

此页面是否有帮助?
0 / 5 - 0 等级