我希望能够从我的程序深处执行这行代码(在实践中在Elm中编译本机代码)
var codec = msgpack.createCodec();
在尝试切换到Webpack之前,我只是有一个指向msgpack-lite的脚本标记。这仍然有用,如果是的话,我应该把.min.js文件放在哪里,以便找到它。
我也尝试过把它放在index.js
中var msgpack = require("msgpack-lite");
var Elm = require('./Main');
var elm = Elm.Main.fullscreen()
但是找不到它。在Define global variable with webpack之后我在webpack.config.js
中尝试了这个 resolve: {
modulesDirectories: ['node_modules'],
extensions: ['', '.js', '.elm', '.scss'],
alias: {
'msgpack': require('msgpack-lite')
}
},
module: {
loaders: [
{
test: /\.html$/,
exclude: /node_modules/,
loader: 'file?name=[name].[ext]'
},
{
test: /\.elm$/,
exclude: [/elm-stuff/, /node_modules/],
loader: 'elm-hot!elm-webpack'
// loader: 'elm-hot!elm-webpack?cwd=' + elmSource
},
{
test: /\.scss$/,
exclude: [/elm-stuff/, /node_modules/],
loaders: ["style-loader", "css-loader", "sass-loader"]
}
],
noParse: /\.elm$/
},
plugins: [
new webpack.ProvidePlugin({
'msgpack': 'msgpack'
})
],
但又没有成功
答案 0 :(得分:2)
要从模块内部设置全局变量(例如index.js),可以将其直接添加到window
对象中。否则,变量将仅存在于模块的上下文中。
window.msgpack = require("msgpack-lite");
我认为您的本机Elm模块中有require("msgpack-lite")
的另一种解决方案。这样,您不需要全局变量,而是您的本机Elm模块有另一个编译步骤。