使用 Webpack 捆绑 sha3/binary 个模块

Bundle sha3/binary modules with Webpack

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 文件.

Creating library <proj>\node_modules\sha3\build\Release\sha3.lib and object <proj>\node_modules\sha3\build\Release\sha3.exp

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

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

有人可以告诉我如何将 sha3 in/with 添加到我的包中。

我的 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')
        })
    ]
}

尝试使用来自 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');

最终对我有用的是:

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

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