Webpack Express не может разрешить модуль "fs", зависимость запроса - выражение

Когда я включаю Express в свой проект, я всегда получаю эти ошибки, когда пытаюсь построить с помощью webpack.

webpack.config.dev.js

var path = require("path")

module.exports = {
  entry: {
    "server": "./server/server.ts"
  },
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
    publicPath: "/public/"
  },
  module: {
    loaders: [
      {
        test: /\.ts(x?)$/,
        exclude: /node_modules/,
        loader: "ts-loader"
      }, {
        test: /\.js(x?)$/,
        exclude: /node_modules/,
        loader: "babel-loader"
      }, {
        test: /\.json$/,
        loader: "json-loader"
      }, {
        test: /\.scss$/,
        exclude: /node_modules/,
        loaders: ["style-loader", "css-loader", "postcss-loader", "sass-loader"]
      }, {
        test: /\.css$/,
        loader: ["style-loader", "css-loader", "postcss-loader"]
      }, {
        test: /\.(jpe?g|gif|png|svg)$/i,
        loader: 'url-loader?limit=10000'
      }
    ]
  }
}

Я пробовал:

  • Установка 'fs', но он не работает
  • Прочитайте где-нибудь, чтобы изменить свойство node fs. Он удаляет предупреждения об ошибках, но я не думаю, что это хорошее постоянное решение.

    module.exports = {
      node: {
        fs: "empty"
      }
    }
    

    Время: 2496 мс           Атрибуты размера активов ChunkNames       bundle.js 761 kB 0 [испущенный] сервер   bundle.js.map 956 kB 0 [испущенный] сервер       + 119 скрытых модулей

    ПРЕДУПРЕЖДЕНИЕ в. /~/express/lib/view.js Критические зависимости: 78: 29-56 запрос зависимости является выражением  @./~/express/lib/view.js 78: 29-56 ОШИБКА в. /~/express/lib/view.js

    Модуль не найден: Ошибка: невозможно разрешить модуль 'fs' в /Users/clementoh/Desktop/templateplate 2/node_modules/express/lib  @./~/express/lib/view.js 18: 9-22 ОШИБКА в. /~/send/index.js

    Модуль не найден: Ошибка: невозможно разрешить модуль 'fs' в/Users/clementoh/Desktop/templateplate2/ node_modules/отправить    @./~/send/index.js 24: 9-22   ОШИБКА в. /~/etag/index.js

    Модуль не найден: Ошибка: невозможно разрешить модуль 'fs' в /Users/clementoh/Desktop/templateplate 2/node_modules/etag  @./~/etag/index.js 22: 12-25 ОШИБКА в. /~/destroy/index.js

    Модуль не найден: Ошибка: невозможно разрешить модуль 'fs' в /Users/clementoh/Desktop/templateplate 2/node_modules/destroy  @./~/destroy/index.js 14: 17-30 ОШИБКА в. /~/mime/mime.js

    Модуль не найден: Ошибка: невозможно разрешить модуль 'fs' в /Users/clementoh/Desktop/templateplate 2/node_modules/mime  @./~/mime/mime.js 2: 9-22

Ответ 1

Просто отправьте ответ, так как не все читают комментарии к SO. @Aurora0001 прибил его. Конфигурация Webpack должна иметь этот набор:

"target": "node"

Ответ 2

Я нахожусь в стеке Angular 2 - Electron - Webpack, и мне нужно было использовать fs в моей службе, я наконец нашел, как это сделать:

1) внутри вашего webpack.common.js, укажите target:'electron-renderer'

2) внутри вашей службы или компонента: import * as fs from 'fs'; и использовать fs, как для проекта node.

Надеюсь, что это поможет!

Ответ 3

Я решил эту проблему двумя шагами:

  • Удалить каталог node_modules

  • Добавить target:'node' в файл конфигурации webpack

Затем запустите npm install. Это сработало для меня хорошо.

Ответ 4

Я добавил node: { fs: 'empty' } без удачи,

Затем я добавил --config для запуска команды:

webpack-dev-sever webpack.config.dev.js

Используйте флаг --config, чтобы использовать пользовательский файл.

webpack-dev-sever --config webpack.config.dev.js

Ответ 5

Рабочий раствор /Hack/Patch для Angular V6 и выше

Решением для меня было взломать модуль Angular-CLI для подмены отсутствующих узловых модулей.

После установки найдите следующий файл:

node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js

Найдите строку node и добавьте это:

node: { crypto: true, stream: true, fs: 'empty', net: 'empty' }

И это оно !!!

🎉🎉🎉🎉🎉

Примечание: вам нужно будет делать этот патч каждый раз, когда вы обновляете пакет. Так что используйте этот скрипт:

package.json

"scripts": {
  ...
  "postinstall": "node patch-webpack.js"
  ...
}

патч-webpack.js

const fs = require('fs');
const f = 'node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/webpack-configs/browser.js';

fs.readFile(f, 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  let result = data.replace(/node: false/g, "node: {crypto: true, stream: true, fs: 'empty', net: 'empty'}");

  fs.writeFile(f, result, 'utf8', function (err) {
    if (err) return console.log(err);
  });
});

Источник: https://blog.lysender.com/2018/07/angular-6-cannot-resolve-crypto-fs-net-path-stream-when-building-angular/

Ответ 6

Добавление "target": "node", работает путем добавления его в webpack.config.js.