首页 文章

如何将文档注入systemjs-builder以捆绑角度4.0.0应用程序?

提问于
浏览
13

我正在尝试捆绑一个有角度的4.0.0应用程序 .

我已经尝试过browserify但是新的angular-loader插件(允许不需要带有templateUrl的组件中的moduleId)不会被调用,因此模板最终会出错路径 .

所以我转移到了systemjs-builder,但问题是当它运行该插件时崩溃说文档没有定义 .

有没有办法将文档注入构建器?

或者我做错了什么?

这是我正在测试的简单构建器(systemjs-config是角度快速入门) .

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

1 回答

  • 0

    我一直在寻找长时间解决这个问题的方法 . 由于我找不到它,我修改 systemjs-angular-loader.js 以绕过错误 . 有了这个黑客系统,js-builder现在正在运行 .

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

相关问题