3

这发生在编译期间进行 require 调用时:

错误指向声明它的行:

var Module = require('module');

这是在 require-from-string 的 index.js 中实际上我可以将该 require 语句放在它继续导致错误的任何地方。

我已经使用 npm 安装了模块,并且它确实存在于我的 node_modules 中。

我的 webpack.config.js :

const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const webpack = require('webpack')
const standardOptions = require('./package.json').standard

const environment = process.env.NODE_ENV || 'development'
const $ = {}
const modulePattern = /(node_modules|bower_components)/

module.exports = {
  node: {
    fs: 'empty'
  },
  entry: './app/javascript/app.js',
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'app.js'
  },
  plugins: [
    // Copy our app's index.html to the build folder.
    new CopyWebpackPlugin([
      { from: './app/index.html', to: "index.html" }
    ])
  ],
  module: {
    rules: [
      {
       test: /\.css$/,
       use: [ 'style-loader', 'css-loader', "postcss-loader" ]
      }
    ],
    loaders: [
      { test: /\.json$/, use: 'json-loader' },
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader',
        query: {
          presets: ['es2015'],
          plugins: ['transform-runtime']
        }
      }
    ]
  }
}
4

2 回答 2

1

当我尝试在带有Next.js的浏览器中使用solc时,我遇到了这个问题。我根据这个对require-from-string repository中的一个未解决问题的答案,通过Webpack 解析回退解决了它。


这是我所做的:

module我为我的配置添加了一个解析后备next.config.js,因此 Webpack 能够解析导入到'module',这就是导致错误的原因。

module.exports = {
    // more Next.js config ...
    webpack(config, { isServer }) {
        if (isServer) {
            return config;
        }

        return {
            ...config,
            resolve: {
                ...config.resolve,
                fallback: {
                    ...config.resolve?.fallback,
                    module: require.resolve('./src/polyfills/module.js'),
                },
            },
        };
    },
};

如果您不使用 Next.js,我假设它webpack.config.js看起来像这样:

module.exports = {
  resolve: {
    fallback: {
      module: require.resolve('./src/polyfills/module.js'),
    },
  },
  // more webpack config ...
};

请注意,这是一个 Webpack 5 配置,Webpack 4 可能会有些不同。

polyfill ( src/polyfills/module.js) 很简单:

module.exports = module.constructor;

我不知道这是否是NodeJS 模块 API的有效 polyfill ,但就我而言,它完成了这项工作。

于 2021-09-30T12:13:44.067 回答
0

尝试这个:

   module.exports = {  
  node: {
     fs: 'empty',    
     module : 'empty'
      },
于 2018-04-18T10:06:48.397 回答