Purescript生成输出在浏览器中生成requirejs错误

Purescript生成输出在浏览器中生成requirejs错误,requirejs,purescript,Requirejs,Purescript,当我使用palp build-O-t html/main.js然后palp build-O-I test-m test.main-t html/testmain.js(即building main和test)时,我得到两个不同的js输出。在前一种情况下,格式为 // Generated by psc-bundle 0.8.2.0 var PS = { }; (function(exports) { // Generated by psc version 0.8.2.0 "use stri

当我使用
palp build-O-t html/main.js
然后
palp build-O-I test-m test.main-t html/testmain.js
(即building 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。 问题是,由于此错误,我无法在浏览器中使用require运行版本

ReferenceError:未定义require

当我在页面中包含require.js时,我遇到了这个错误

错误:尚未为上下文加载模块名“./前奏曲”:。使用require([])


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

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

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

有几种不同的方法可以实现这一点,并且编译器现在已经以一种应该使再次发生这种情况的概率更低的方式进行了更新,所以我不会花太多时间担心这到底是如何发生的

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

  • 更新至最新版本的
    psc
    (0.8.3将
    --require path
    默认值更改为
    。/
    ,因此0.8.3之后的任何版本都可以,但在大多数情况下,您都需要最新版本)
  • 删除您的
    输出
    目录
  • 重新编译所有内容

从错误消息中,Prelude似乎是require的依赖项,因此您需要在require.js之前加载它。我不知道,我只是猜测。我想这行不通。require.js需要先加载,因为main.js使用它。您的建议导致引用错误:未定义require。Prelude是否具有require的依赖项?如果您指的是Prelude.js,在我的案例中可以在bower_components\purscript Prelude中找到,那么不,它没有。这是真的。但是使用browserify生成的输出的大小似乎比构建生成的输出大得多。无论如何,我想知道为什么在构建main和test时build会导致两种不同的输出。我认为这种差异是由于第二个示例中的
-m
标志,第一个示例没有入口点。。。不过我可能错了。也许值得将您的
palp
psc
更新为最新版本,最新
palp
--help
中似乎没有
browserify
,所以我的建议可能是完全错误的!如果没有指定入口点,默认情况下它应该是Main。然而,我尝试了以下方法:palpbuild-O-Main-thtml/Main.js,但没有任何帮助。我升级到了0.8.4,它工作起来非常有魅力。非常感谢听到这个消息真是太好了