Purescript纸浆构建输出在浏览器

时间:2016-04-16 11:07:36

标签: requirejs purescript

当我使用pulp build -O -t html/main.js然后pulp build -O -I test -m Test.Main -t html/testmain.js(即构建main和test)时,我得到两个不同的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

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

  

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

因此我的问题是,在浏览器中运行第一个案例可以做些什么。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

有几种不同的方法可以发生,编译器现在已经更新,应该会使这种情况发生的可能性再次降低,所以我不会花费太多时间来担心如何这已经发生了。

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

  • 更新到psc的最新版本(0.8.3将--require-path默认更改为../,因此0.8.3之后的任何版本都应该这样做,但您需要最新版本在大多数情况下)
  • 删除output目录
  • 再次编译所有内容。