Webpack import-loader with messageformat and angular-translate

时间:2015-06-05 19:21:03

标签: javascript angularjs google-chrome webpack

我很难让angular-translate-interpolation-messageformatimports-loader的{​​{1}}相匹配。我在this issue中概述了这个问题。

复制:

即使使用UMD(yay)公开模块,它实际上也在使用全局MessageFormat对象here。这迫使我将MessageFormat公开到MessageFormat(我不想这样做),或者使用webpack进行解决(这也很麻烦)。真正的解决方案是正确使用UMD而不依赖于全局变量,而是需要正确的东西。

以下是UMD格式现在的样子:

window

这是它应该是什么样子:

(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module unless amdModuleId is set
    define([], function () {
      return (factory());
    });
  } else if (typeof exports === 'object') {
    // Node. Does not work with strict CommonJS, but
    // only CommonJS-like environments that support module.exports,
    // like Node.
    module.exports = factory();
  } else {
    factory();
  }
}(this, function () {

// interpolation-messageformat code that uses the global MessageFormat variable

}));

谢谢!

因此,在问题得到解决之前,我需要做一个解决方法。我真的更愿意避免使用全局变量。这是我目前使用(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module unless amdModuleId is set define(['messageformat'], function (MessageFormat) { // <-- changed line return (factory(MessageFormat)); // <-- changed line }); } else if (typeof exports === 'object') { // Node. Does not work with strict CommonJS, but // only CommonJS-like environments that support module.exports, // like Node. module.exports = factory(require('messageformat')); // <-- changed line } else { factory(root.MessageFormat); // <-- changed line } }(this, function (MessageFormat) { // <-- changed line // interpolation-messageformat code that uses the global MessageFormat variable }));

的解决方案
imports-loader

有了它,一切都很好,但是,当我打开Chrome时,应用程序会在运行使用require('imports?MessageFormat=messageformat!angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat'); angular-translate-interpolation-messageformat的{​​{1}}函数时断开,表示MessageFormat未定义

这里的事情变得奇怪......

如果我在任何其他浏览器(Chrome除外)中打开应用程序,它就可以了。此外,如果我在部署时打开应用程序,它可以正常工作(即使在Chrome中)。

这里的事情变得怪异了......

如果我打开我的Chrome DevTools并然后在Chrome中打开本地应用,一切正常。 O_O

所以,无论如何,我想知道我是否正在使用MessageFormat错误或其他东西。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

您是否随时使用devtool: 'eval'?我已经看到了你描述的同样奇怪的行为,它转而转向devtool: 'source-map'