使用Webpack捆绑sha3 /二进制模块

时间:2017-02-14 21:57:56

标签: node.js webpack sha

当我捆绑我的来源时,Webpack会发出警告,因为它无法解决“我的问题”。模块。

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

  

创建库&lt; proj&gt; \ node_modules \ sha3 \ build \ Release \ sha3.lib和object &lt; proj&gt; \ node_modules \ sha3 \ build \ Release \ sha3.exp

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

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

有人可以指出我如何在我的包中加入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')
        })
    ]
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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个包!