Request: Webpack

Созданный на 6 апр. 2015  ·  41Комментарии  ·  Источник: request/request

Я пытаюсь загрузить request с помощью Webpack и вижу эту ошибку:

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-тесты

Мой план состоит в том, чтобы превратить это в свою собственную проверку кармы и отправить PR, чтобы другие могли использовать его в качестве примера. Кроме того, он может выявить будущие проблемы по мере развития.

Да, нашел то же самое, спасибо. Для всех, кто сталкивается с этим, соответствующие документы веб-пакета находятся здесь: http://webpack.github.io/docs/configuration.html#node

@jaredmcdonald большое спасибо :)

@ pho3nixf1re было бы здорово, если бы вы отправили PR о запросе тестирования с помощью webpack (дополнительный тест, а не вместо просмотра): +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
}

Это было для меня огромным подспорьем. Спасибо всем выше.

Всем спасибо, столкнулся с этим сам.

при удаче?

Я использую веб-пакет и запрос и получил ошибку, которую вы все получили.
Пробовал решение с элементом json-loader и node, но все еще получаю ошибки ...

Привет. Мне нужна помощь. Я хочу объединить node js mysql в свое приложение для реагирования. Но я получил сообщение об ошибке, не могу разрешить модуль 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 . Я столкнулся с этой проблемой, пытаясь использовать dotev и webpack с транспилером babel es6. Импорт веб-пакета как import 'dotenv/config'; как описано в https://github.com/motdotla/dotenv/issues/114

Хотя приведенное выше решение node {} помогло моему webpack.config.js, оно сломало мой karma.conf.js, который от него зависит, со следующей ошибкой:

ReferenceError: строгий режим запрещает неявное создание глобального свойства '_crypto'

Кто-нибудь решил, что это работает с dotenv ?

У меня возникла эта проблема при попытке использовать node-soap , которая зависит от request в приложении React, которое использует 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 Откуда вы

@richburdon , @lucasbento У вас есть пример, который поможет вам?

@garethderioth, прости, я не могу вспомнить. Это было слишком давно.

Между прочим: пока что я использую API извлечения HTML5 и этот полифилл для своих запросов AJAX.

@garethderioth
@jaredmcdonald сказал это выше в https://github.com/request/request/issues/1529#issuecomment -90347445

Да, нашел то же самое, спасибо. Для всех, кто сталкивается с этим, соответствующие документы веб-пакета находятся здесь: http://webpack.github.io/docs/configuration.html#node

Между прочим: пока что я использую API извлечения HTML5 и этот полифилл для своих запросов AJAX.

Создание пользователей приложения React: обратите внимание, что CRA уже включает полифилл window.fetch поэтому вы можете безопасно использовать его вместо request если он соответствует вашему варианту использования.

@screendriver @josiahsprague Вместо этого:

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

Я написал:

target: 'node',

Это решило все мои проблемы.

Изменить: вы можете узнать больше об этом здесь: https://webpack.github.io/docs/configuration.html#target

@gaearon Что делать, если зависимость требуется какой-то третьей библиотеке?
Поднятие проблемы в репозитории create-response-app, как я должен был с самого начала: /

Мой скриншот ошибок, опубликованный выше, не имеет отношения к делу, что, вероятно, очевидно для любого, кто прочитал эти ошибки. 😂 В любом случае, мне кажется, что оба решения в комментарии @pedzed подойдут мне. Другое возможное решение - использовать target: 'node-webkit или другой аналогичный вариант в зависимости от вашей ситуации.

В моем случае я просто переключился с node-soap на browser-soap , но это не сработает для всех.

У меня была другая проблема, похожая на эту, но в итоге она оказалась socketio / socket.io-client / issues / 933 для всех, кто может с ней столкнуться.

+1
Спасибо!

Я сделал небольшое изменение, используя то, что предоставили @screendriver и @kilometer (спасибо!).

Webpack жаловался, что существует пустое расширение, однако я не думаю, что для большинства это потребуется.

`` ''
var path = require ('путь')
var request = require ('запрос')
var webpack = require ('webpack')

module.exports = {
запись: './src/main.js',
вывод: {
путь: path.resolve (__ dirname, './dist'),
publicPath: '/ dist /',
имя файла: 'build.js'
},
модуль: {
правила: [
{
тест: /.json$/,
загрузчик: 'json-loader'
}
]
},
разрешить: {
/ extension: ['.webpack.js', '.web.js', '.js'] /
}
узел: {
консоль: правда,
fs: 'пусто',
net: 'пусто',
tls: 'пусто'
}
}
`` ''

Лучшее простое решение, не влияющее на связанный код:

require

Для тех, у кого проблемы с сборником рассказов и которые не хотят заменять исходную конфигурацию веб-пакета сборника рассказов, вы можете расширить его, создав .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 вместо 'empty'

target: 'node', меня сработало

Я столкнулся с этой проблемой, потому что у меня была двойная конфигурация клиент / сервер для рендеринга на стороне сервера. Конфигурация рендеринга на стороне сервера была помечена как цель: «узел», в то время как в конфигурации клиента она не была указана. Я добавил target: 'web' в конфигурацию клиента, и ошибка исчезла.

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.

Запрос сейчас находится в режиме обслуживания и не будет объединять какие-либо новые функции или устранять эту ошибку. Пожалуйста, смотрите # 3142 для получения дополнительной информации.

У меня была такая же проблема при попытке использовать jQuery с Nuxt (или Node), проблема заключалась в том, что я импортировал jQuery и Bootstrap и добавил jsdom чтобы решить эту проблему, но не помогло. Я решил импортировать библиотеки непосредственно в head раздел nuxt.config.js , другой способ - установить client mode в подключаемых модулях конфигурации nuxt, надеюсь, это кому-то поможет.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги