Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   SystemJS/builder "Unable to calculate canonical name to bundle" (https://javascript.ru/forum/offtopic/58653-systemjs-builder-unable-calculate-canonical-name-bundle.html)

FINoM 02.10.2015 18:41

SystemJS/builder "Unable to calculate canonical name to bundle"
 
Создал вопрос на гитхабе, но уже два дня не отвеают.
https://github.com/systemjs/builder/issues/334
Дерьмовый саппорт, откровенно говоря. Но я не об этом.

Использую плагин text для SystemJS.

import gTemplate from '../templates/g.html!text'


Работает отлично, но приложение не хочет компилиться.

[Error: Unable to calculate canonical name to bundle file:///home/finom/.../templates/g.html]

Текст плагина (это официальный плагин от SystemJS)

/*
  Text plugin
*/
exports.translate = function(load) {
  return 'module.exports = "' + load.source
    .replace(/(["\\])/g, '\\$1')
    .replace(/[\f]/g, "\\f")
    .replace(/[\b]/g, "\\b")
    .replace(/[\n]/g, "\\n")
    .replace(/[\t]/g, "\\t")
    .replace(/[\r]/g, "\\r")
    .replace(/[\u2028]/g, "\\u2028")
    .replace(/[\u2029]/g, "\\u2029")
  + '";';
}



Кусок используемого gulpfile:
gulp.task('build', function(cb) {
	var path = require("path");
	var Builder = require('systemjs-builder');
	var builder = new Builder();

	builder.loadConfig('src/config.js').then(function() {
		builder.buildStatic('app.js', 'dist/js/app.js')
			.then(function() {
				console.log('Build complete');
				cb();
			})
			.catch(function(err) {
				console.log('Build error');
				console.log(err);
				cb();
			});
	}).catch(function(e) {
		console.error(e);
	})
});

FINoM 02.10.2015 19:49

Поковырялся в сорцах и решил проблему, перенеся папку с шаблонами в рут basePath. Билд проходит без ошибок. проблема в том, что HTML файл не попадает в скомпиленный JS файл. Прийдется юзать аякс, к сожалению.

FINoM 07.10.2015 17:51

Задолбало. Пока работал с SystemJS, отрепортил несколько ошибок.

Последняя из них: если в .js файле есть анонимное объявление AMD модуля, при этом там же объявляется еще и именованный модуль (например, если библиотека содержит несколько модулей для внутреннего или публичного использования), билдер включает этот файл в бандл, но игнорирует все модули:

"Uncaught Module 2 not present."


define(function() {
  return 'foo';
});

define('bar', function() {
  return 'bar';
});

define('baz', function() {
  return 'baz';
});


Ну баг себе и баг, версия ведь нулевая. Только проблема в том, что автор такую логику считает фичей, а не багом, несмотря на то, что этот способ описания модулей прекрасно работает в RequireJS и optimizer. Он предложил использовать другую библиотеку, в которой нет такого определения модулей. П..ц.

FINoM 07.10.2015 22:34

Нашел еще один баг... В общем, крепко подумайте, юзать ли SystemJS Builder. А свои задачи я с горем пополам решил. [Кланяюсь]

ТОТ_САМЫЙ 07.10.2015 22:41

Цитата:

Сообщение от FINoM
[Кланяюсь]

всегда обращайся бро, форум всегда подскажет


Часовой пояс GMT +3, время: 14:54.