2016-04-16 1 views
0

Когда я использую pulp build -O -t html/main.js, а затем pulp build -O -I test -m Test.Main -t html/testmain.js (т. Е. Главный корпус и тест) Я получаю два разных выхода js. В первом случае формат составляетРезультат сборки сборной цепочки purescript генерирует ошибку requirejs в браузере

// 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; 
    }; 

Оба примеры укоротить, но дело в том, что требует используется в первый раз, в то время не используется во второй раз. Вопрос заключается в том, что я не могу запустить версию с помощью требуется в браузере из-за этой ошибки

ReferenceError: require is not defined

Когда я включил require.js в страницу, я получил эту ошибку

Error: Module name "../Prelude" has not been loaded yet for context: _. Use require([]) http://requirejs.org/docs/errors.html#notloaded

Таким образом, мой вопрос в том, что можно сделать, чтобы запустить первый случай в браузере.

+0

Из сообщения об ошибке кажется, что Prelude является зависимой от require, поэтому вам нужно загрузить его до require.js. Я не знаю, я просто догадываюсь. –

+0

Я думаю, что это не сработает. require.js необходимо загрузить сначала, потому что он используется main.js. То, что вы предлагаете, приводит к ReferenceError: require не определен. – user2039784

+0

Есть ли у Prelude зависимость от требуемого? –

ответ

0

Я предполагаю, что это исходит от запуска сборок с различными параметрами --require-path; один раз со старым значением по умолчанию, которое было пустой строкой, и один раз с ../. Это приведет к psc-bundle, не понимая, что необходимо включить Prelude и Control.Monad.Eff правильно в первом случае. psc-bundleдолжен заменить те require звонки со ссылками на другие модули, чтобы код работал в браузерах.

Существует несколько способов, которыми это может случиться, и теперь компилятор был обновлен таким образом, чтобы вероятность того, что это произойдет снова, значительно ниже, поэтому я не буду тратить слишком много времени на то, как именно это произошло.

Если ни одно из указанных выше не имеет для вас никакого смысла, не беспокойтесь; Я думаю, что вам просто нужно сделать следующее, чтобы исправить это:

  • обновление до последней версии psc (0.8.3 изменил --require-path по умолчанию для ../, поэтому любая версия после 0.8.3 должен делать, но вы будете требуется последняя версия в большинстве случаев)
  • Удалить output
  • Скомпилируйте все снова.
+0

Я повысил до 0.8.4, и он работает как шарм. Большое спасибо – user2039784

+0

Это здорово. :) – hdgarrood

0

Возможно, вам необходимо использовать опцию --browserify, чтобы построить первый случай для браузера.

+0

Это правда. Но размер результата, сгенерированного с помощью браузера, по-видимому, намного больше, чем размер, созданный сборкой. Во всяком случае, я хотел бы знать, почему сборка ведет к двум разным выходам при построении основного и тестового. – user2039784

+0

Я думаю, что разница связана с флагом '-m' во втором примере, первый не имеет точки входа ... Я мог ошибаться.Возможно, стоит обновить ваши 'pulp' и' psc' до последних версий тоже, кажется, что 'browserify' даже не присутствует в' --help' из последней 'pulp', поэтому, возможно, мой совет совершенно неверен ! –

+0

Если указана точка входа не указана, по умолчанию она должна быть главной. Тем не менее, я пробовал это: pulp build -O -m Main -t html/main.js, но не помог. – user2039784

Смежные вопросы