【问题标题】:Bundle sha3/binary modules with Webpack使用 Webpack 捆绑 sha3/二进制模块
【发布时间】:2017-07-03 09:13:20
【问题描述】:

当我捆绑我的源代码时,Webpack 会发出警告,因为它无法解析“sha3”模块。

$ npm run build
WARNING in ./~/keccakjs/index.js
Module not found: Error: Can't resolve 'sha3' in '<PROJ>\node_modules\keccakjs'
 @ ./~/keccakjs/index.js 2:19-34
 @ ./~/<lib>/index.js
 @ ./lib/<file>.js

sha3 library 的原因是没有 js 文件

创建库 \node_modules\sha3\build\Release\sha3.lib 和对象 \node_modules\sha3\build\Release\sha3。经验

我可以在我的项目中运行require('sha3'),但是 webpack 无法解决它。

我查看了docs here,关于 webpack 如何解析库。

有人可以告诉我如何将 sha3 包含在我的捆绑包中。

我的 Webpack 配置:

module.exports = {
    target: 'node',
    entry: "./<lib>.js",
    devtool: "source-map",
    node: {
        __dirname: false,
        __filename: false,
    },
    output: {
        path: "./dist",
        filename: "<lib>.min.js"
    },
    plugins: [
        new webpack.optimize.OccurrenceOrderPlugin(),
        new webpack.DefinePlugin({
            'process.env.NODE_ENV': JSON.stringify('production')
        })
    ]
}

【问题讨论】:

    标签: node.js webpack sha


    【解决方案1】:

    实际上最终为我工作的是:

    resolve: {
        alias: {
            sha3: path.join(__dirname,'node_modules/sha3/build/Release/sha3.node')
        },
    },
    module: {
        rules: [
            {test: /\.node$/, use: 'node-loader'},
        ]
    },
    

    这样,当它无法解析sha3 时,我告诉它要导入哪个文件。以及.node 文件中的node-loader 包!

    【讨论】:

      【解决方案2】:

      尝试使用来自here 的 webpack 的二进制加载器。然后你可以:

      1) 在 WebPack 配置中定义加载器:

      module.exports = {
          target: 'node',
          entry: "./<lib>.js",
          devtool: "source-map",
          node: {
              __dirname: false,
              __filename: false,
          },
          output: {
              path: "./dist",
              filename: "<lib>.min.js"
          },
          plugins: [
              new webpack.optimize.OccurrenceOrderPlugin(),
              new webpack.DefinePlugin({
                  'process.env.NODE_ENV': JSON.stringify('production')
              })
          ],
          module: {
              loaders: [
                  { test: /sha3$/, loader: 'binary' }
              ]
          }
      }
      

      2) 直接在你的导入中使用加载器:

      require('binary!sha3');
      

      【讨论】:

      • 看起来很有希望!
      • 获取configuration has an unknown property 'loaders'?
      • 糟糕,抱歉,这应该在模块对象中,我想当我看到 module.exports 时我有点困惑。已编辑!
      • 它仍然无法正常工作:/。即使我添加了这个:externals: { "sha3": "keccak", },
      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2021-07-15
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2017-07-20
      • 2019-08-24
      • 2017-07-12
      相关资源
      最近更新 更多