2017-02-14 64 views
0

当我捆绑我的源代码时,Webpack会发出警告,因为它无法解析'sha3'模块。使用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.lib和对象<凸出> \ node_modules \沙三段\建立\发布\ sha3.exp

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

我看着docs here,关于webpack如何解析库文件。

是否有人可以指示我如何将sha3包含到我的包中?

我的WebPack配置:利用的WebPack二进制装载机从here

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

回答

0

什么是真正结束了对我的工作是:

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

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

1

尝试。然后,你可以:

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'); 
+0

看起来很有前途! –

+0

获取'配置有一个未知属性'loader'? –

+1

哎呀,对不起,这应该是在模块对象中,当我看到module.exports时我觉得有点困惑。编辑! –