【问题标题】:Truffle Webpack: Can't resolve 'module' in require-from-stringTruffle Webpack:无法解析 require-from-string 中的“模块”
【发布时间】:2017-11-24 10:35:11
【问题描述】:

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

错误指向声明 this 的行:

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']
        }
      }
    ]
  }
}

【问题讨论】:

  • 你解决了吗?

标签: javascript webpack truffle


【解决方案1】:

我在浏览器中尝试使用solcNext.js 时遇到了这个问题。我在this answer 的基础上通过Webpack resolve fallback 解决了它,解决了require-from-string repository 中的一个未解决问题。


这是我所做的:

我在我的next.config.js 配置中添加了module 的解析后备,因此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 module API 的有效 polyfill,但就我而言,它完成了这项工作。

【讨论】:

  • 我使用 NX@13 和 Webpack@5,该解决方案对我很有效
【解决方案2】:

试试这个:

   module.exports = {  
  node: {
     fs: 'empty',    
     module : 'empty'
      },

【讨论】:

  • 不鼓励仅使用代码回答,请描述为什么这是一个解决方案,因为这将对未来的访问者有所帮助。谢谢你
猜你喜欢
  • 2018-05-31
  • 2021-07-21
  • 2016-11-04
  • 2021-05-21
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多