Webpack:创建全局变量

时间:2017-01-20 09:21:17

标签: webpack

我希望能够从我的程序深处执行这行代码(在实践中在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'
     })
 ],

但又没有成功

1 个答案:

答案 0 :(得分:2)

要从模块内部设置全局变量(例如index.js),可以将其直接添加到window对象中。否则,变量将仅存在于模块的上下文中。

window.msgpack = require("msgpack-lite");

我认为您的本机Elm模块中有require("msgpack-lite")的另一种解决方案。这样,您不需要全局变量,而是您的本机Elm模块有另一个编译步骤。