当我使用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
因此我的问题是,在浏览器中运行第一个案例可以做些什么。
答案 0 :(得分:0)
您可能需要使用--browserify
选项为浏览器构建第一个案例。
答案 1 :(得分:0)
我的猜测是,这来自运行不同--require-path
选项的构建;一次使用旧的默认值,这是一个空字符串,一次使用../
。这会导致psc-bundle
没有意识到在第一种情况下需要正确包含Prelude
和Control.Monad.Eff
。 psc-bundle
应使用对其他模块的引用替换那些require
调用,以便代码可以在浏览器中使用。
有几种不同的方法可以发生,编译器现在已经更新,应该会使这种情况发生的可能性再次降低,所以我不会花费太多时间来担心如何这已经发生了。
如果以上都没有任何意义,请不要担心;我认为您只需要执行以下操作来解决此问题:
psc
的最新版本(0.8.3将--require-path
默认更改为../
,因此0.8.3之后的任何版本都应该这样做,但您需要最新版本在大多数情况下)output
目录