当我捆绑我的来源时,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')
})
]
}
答案 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
个包!