Estoy tratando de agrupar una aplicación angular 4.0.0.
Probé browserify, pero el nuevo complemento de cargador angular (que permite no necesitar el moduleId en componentes con templateUrl) no se llama, por lo que las plantillas terminan con la ruta incorrecta.
Así que me mudé a systemjs-builder, pero el problema es que cuando ejecuta ese complemento, se bloquea y dice que el documento no está definido.
¿Hay alguna manera de inyectar documentos en el constructor?
¿O estoy haciendo algo mal?
Este es el constructor simple que estoy probando (el systemjs-config es el de inicio rápido angular).
var path = require("path"); var Builder = require('systemjs-builder'); var builder = new Builder('src/frontend', 'src/frontend/systemjs.config.js'); builder .bundle('main.js', 'bundle.js') .then(function() { console.log('Build complete'); }) .catch(function(err) { console.log('Build error'); console.log(err); });He estado buscando la solución a este problema durante largas horas. Como no pude encontrarlo, modifiqué systemjs-angular-loader.js para evitar el error. Con este hack systemjs-builder ahora está funcionando.
var templateUrlRegex = /templateUrl\s*:(\s*['"`](.*?)['"`]\s*)/gm; var stylesRegex = /styleUrls *:(\s*\[[^\]]*?\])/g; var stringRegex = /(['`"])((?:[^\\]\\\1|.)*?)\1/g; module.exports.translate = function(load){ if (load.source.indexOf('moduleId') != -1) return load; var document=document || null; if(document){ var url = document.createElement('a'); url.href = load.address; var basePathParts = url.pathname.split('/'); basePathParts.pop(); var basePath = basePathParts.join('/'); var baseHref = document.createElement('a'); baseHref.href = this.baseURL; baseHref = baseHref.pathname; if (!baseHref.startsWith('/base/')) { // it is not karma basePath = basePath.replace(baseHref, ''); } } else{ var address=load.address; address=address.replace('file:///'+__dirname+'/', ''); var basePathParts = address.split('/'); basePathParts.pop(); var basePath = basePathParts.join('/'); } load.source = load.source .replace(templateUrlRegex, function(match, quote, url){ var resolvedUrl = url; if (url.startsWith('.')) { resolvedUrl = basePath + url.substr(1); } return 'templateUrl: "' + resolvedUrl + '"'; }) .replace(stylesRegex, function(match, relativeUrls) { var urls = []; while ((match = stringRegex.exec(relativeUrls)) !== null) { if (match[2].startsWith('.')) { urls.push('"' + basePath + match[2].substr(1) + '"'); } else { urls.push('"' + match[2] + '"'); } } return "styleUrls: [" + urls.join(', ') + "]"; }); return load; };