gpt4 book ai didi

angular - 如何将文档注入(inject) systemjs-builder 以捆绑 angular 4.0.0 应用程序?

转载 作者:太空狗 更新时间:2023-10-29 17:00:16 24 4
gpt4 key购买 nike

我正在尝试捆绑一个 Angular 4.0.0 应用。

我已经尝试过 browserify,但是新的 angular-loader 插件(允许在带有 templateUrl 的组件中不需要 moduleId)没有被调用,所以模板以错误的路径结束。

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

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

还是我做错了什么?

这是我正在测试的简单构建器(systemjs-config 是 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);
});

最佳答案

我一直在寻找这个问题的解决方案。由于找不到它,我修改了 systemjs-angular-loader.js 以绕过错误。有了这个 hack,systemjs-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;
};

关于angular - 如何将文档注入(inject) systemjs-builder 以捆绑 angular 4.0.0 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com