0

当我使用pulp build -O -t html/main.js然后pulp build -O -I test -m Test.Main -t html/testmain.js(即构建主要和测试)时,我得到两个不同的 js 输出。在前一种情况下,格式为

// Generated by psc-bundle 0.8.2.0
var PS = { };
(function(exports) {
  // Generated by psc version 0.8.2.0
  "use strict";
  var Prelude = require("../Prelude");
  var Control_Monad_Eff = require("../Control.Monad.Eff");
  exports["main"] = main;
})(PS["Main"] = PS["Main"] || {});
PS["Main"].main();

请注意要求。在后一种情况下,根本没有要求

// Generated by psc-bundle 0.8.2.0
var PS = { };
(function(exports) {
  /* global exports */
  "use strict";

  exports.concatArray = function (xs) {
    return function (ys) {
      return xs.concat(ys);
    };
  };

  exports.showNumberImpl = function (n) {
    /* jshint bitwise: false */
    return n === (n | 0) ? n + ".0" : n.toString();
  };

})(PS["Prelude"] = PS["Prelude"] || {});
(function(exports) {
// Generated by psc version 0.8.2.0
  "use strict";
  var $foreign = PS["Prelude"];
  var Semigroupoid = function (compose) {
      this.compose = compose;
  };

这两个例子都是缩短的,但重点是第一次使用require,第二次没有使用。问题是由于此错误,我无法在浏览器中使用 require 运行该版本

ReferenceError:未定义要求

当我将 require.js 包含到页面中时,出现此错误

错误:尚未为上下文加载模块名称“../Prelude”:_。使用 require([]) http://requirejs.org/docs/errors.html#notloaded

因此我的问题是,如何在浏览器中运行第一个案例。

4

2 回答 2

0

我的猜测是,这来自运行具有不同--require-path选项的构建;一次使用旧的默认值,它是一个空字符串,一次使用../. 这将导致psc-bundle没有意识到它需要在第一种情况下正确Prelude包含。应该用对其他模块的引用替换这些调用,以便代码在浏览器中工作。Control.Monad.Effpsc-bundle require

有几种不同的方式会发生这种情况,并且编译器现在已经以某种方式进行了更新,这种方式应该使再次发生这种情况的可能性大大降低,所以我不会花太多时间担心这种情况究竟是如何发生的。

如果以上都对您没有任何意义,请不要担心;我认为您只需要执行以下操作即可解决此问题:

  • 更新到最新版本psc(0.8.3 将--require-path默认更改为../,因此 0.8.3 之后的任何版本都应该这样做,但在大多数情况下你会想要最新版本)
  • 删除你的output目录
  • 再次编译所有内容。
于 2016-04-20T13:30:59.027 回答
0

您可能需要使用该--browserify选项为浏览器构建第一个案例。

于 2016-04-16T12:51:16.920 回答