如何修复 templateCache 中的模板路径? (gulp-angular-模板缓存)
How to fix template paths in templateCache? (gulp-angular-templatecache)
我正在使用 gulp-angular-templatecache to generate a templateCache.js file which combines all my HTML template files into 1. (my full gulpfile)
将新模块注入我的应用程序后,我的指令将自动选取模板,我不需要将部分 .html 文件添加到我的构建文件夹中。
问题是前导文件夹路径被截断,请参阅下面的示例:
我的指令中的路径:
templateUrl : "panels/tags/tagsPanel.html"...
templateUrl : "header/platform_header/platformHeader.html"...
我生成的模板缓存文件中的路径:
$templateCache.put("tags/tagsPanel.html"...
$templateCache.put("platform_header/platformHeader.html"...
^ panels
和 header
迷路了。
我正在尝试编写一个函数来修复我的 Gulpfile 中的问题。
我的配置部分 Gulpfile:
var config = {
srcPartials:[
'app/beta/*.html',
'app/header/**/*.html',
'app/help/*.html',
'app/login/*.html',
'app/notificaitons/*.html',
'app/panels/**/*.html',
'app/popovers/**/*.html',
'app/popovers/*.html',
'app/user/*.html',
'app/dashboard.html'
],
srcPaths:[
'beta/',
'header/',
'help/',
'login/',
'notificaitons/',
'panels/',
'popovers/',
'popovers/',
'user/',
'dashboard.html'
],
destPartials: 'app/templates/'
};
我的html-templates
gulp.task
gulp.task('html-templates', function() {
return gulp.src(config.srcPartials)
.pipe(templateCache('templateCache.js', {
root: updateRoot(config.srcPaths)
},
{ module:'templateCache', standalone:true })
).pipe(gulp.dest(config.destPartials));
});
function updateRoot(paths) {
for (var i = 0; i < paths.length; i++) {
// console.log(paths);
console.log(paths[i]);
return paths[i];
}
}
^ 以上是有效的,因为它使用 root option in gulp-angular-templatecache 在模板路径前附加一个新字符串。
问题是我上面的代码 returns 一次,并将所有路径更新到路径数组中的第一项,即 beta/
.
如何编写才能正确替换每个文件的路径?
想通了!我不应该使用确切的文件夹名称,而是在我的配置
中使用 globs **
var config = {
srcTemplates:[
'app/**/*.html',
'app/dashboard.html',
'!app/index.html'
],
destPartials: 'app/templates/'
};
更新后gulp.task:
gulp.task('html-templates', function() {
return gulp.src(config.srcTemplates)
.pipe(templateCache('templateCache.js', { module:'templateCache', standalone:true })
).pipe(gulp.dest(config.destPartials));
});
现在输出正确:
$templateCache.put("beta/beta.html"...
$templateCache.put("header/control_header/controlHeader.html"...
$templateCache.put("panels/tags/tagsPanel.html"...
我 运行 遇到了类似的问题,但就我而言,不可能对所有 gulp.src 条目使用相同的目录。
有一个解决方案适用于所有这些文件夹
return gulp.src(['public/assets/app1/**/*.tpl.html', 'public/assets/common_app/**/*.tpl.html'])
.pipe(templateCache({
root: "/",
base: __dirname + "/public",
module: "App",
filename: "templates.js"
}))
.pipe(gulp.dest('public/assets/templates'))
假定 gulp 文件是 public 目录的上一级目录。它将从 src 文件的完整路径中删除基本字符串。
Base 也可以是一个函数,它将传递文件对象,这在更复杂的情况下可能会有所帮助。都在 gulp-angular-templatecache
中 index.js 的第 60 行附近
您还可以使用 this gulp plugin,它可以读取您的路线、指令并将 templateUrl 替换为 templateUrl 中引用的模板。
这将消除有关在您的应用程序中处理 templateUrl 的所有麻烦。这使用相对 url 来指示 js 文件而不是绝对 url.
src
+-hello-world
|-hello-world-directive.js
+-hello-world-template.html
你好世界-directive.js:
angular.module('test').directive('helloWorld', function () {
return {
restrict: 'E',
// relative path to template
templateUrl: 'hello-world-template.html'
};
});
你好世界-template.html:
<strong>
Hello world!
</strong>
gulpfile.js:
var gulp = require('gulp');
var embedTemplates = require('gulp-angular-embed-templates');
gulp.task('js:build', function () {
gulp.src('src/scripts/**/*.js')
.pipe(embedTemplates())
.pipe(gulp.dest('./dist'));
});
gulp-angular-embed-templates 将生成以下文件:
angular.module('test').directive('helloWorld', function () {
return {
restrict: 'E',
template:'<strong>Hello world!</strong>'
};
});
我正在使用 gulp-angular-templatecache to generate a templateCache.js file which combines all my HTML template files into 1. (my full gulpfile)
将新模块注入我的应用程序后,我的指令将自动选取模板,我不需要将部分 .html 文件添加到我的构建文件夹中。
问题是前导文件夹路径被截断,请参阅下面的示例:
我的指令中的路径:
templateUrl : "panels/tags/tagsPanel.html"...
templateUrl : "header/platform_header/platformHeader.html"...
我生成的模板缓存文件中的路径:
$templateCache.put("tags/tagsPanel.html"...
$templateCache.put("platform_header/platformHeader.html"...
^ panels
和 header
迷路了。
我正在尝试编写一个函数来修复我的 Gulpfile 中的问题。
我的配置部分 Gulpfile:
var config = {
srcPartials:[
'app/beta/*.html',
'app/header/**/*.html',
'app/help/*.html',
'app/login/*.html',
'app/notificaitons/*.html',
'app/panels/**/*.html',
'app/popovers/**/*.html',
'app/popovers/*.html',
'app/user/*.html',
'app/dashboard.html'
],
srcPaths:[
'beta/',
'header/',
'help/',
'login/',
'notificaitons/',
'panels/',
'popovers/',
'popovers/',
'user/',
'dashboard.html'
],
destPartials: 'app/templates/'
};
我的html-templates
gulp.task
gulp.task('html-templates', function() {
return gulp.src(config.srcPartials)
.pipe(templateCache('templateCache.js', {
root: updateRoot(config.srcPaths)
},
{ module:'templateCache', standalone:true })
).pipe(gulp.dest(config.destPartials));
});
function updateRoot(paths) {
for (var i = 0; i < paths.length; i++) {
// console.log(paths);
console.log(paths[i]);
return paths[i];
}
}
^ 以上是有效的,因为它使用 root option in gulp-angular-templatecache 在模板路径前附加一个新字符串。
问题是我上面的代码 returns 一次,并将所有路径更新到路径数组中的第一项,即 beta/
.
如何编写才能正确替换每个文件的路径?
想通了!我不应该使用确切的文件夹名称,而是在我的配置
中使用 globs**
var config = {
srcTemplates:[
'app/**/*.html',
'app/dashboard.html',
'!app/index.html'
],
destPartials: 'app/templates/'
};
更新后gulp.task:
gulp.task('html-templates', function() {
return gulp.src(config.srcTemplates)
.pipe(templateCache('templateCache.js', { module:'templateCache', standalone:true })
).pipe(gulp.dest(config.destPartials));
});
现在输出正确:
$templateCache.put("beta/beta.html"...
$templateCache.put("header/control_header/controlHeader.html"...
$templateCache.put("panels/tags/tagsPanel.html"...
我 运行 遇到了类似的问题,但就我而言,不可能对所有 gulp.src 条目使用相同的目录。
有一个解决方案适用于所有这些文件夹
return gulp.src(['public/assets/app1/**/*.tpl.html', 'public/assets/common_app/**/*.tpl.html'])
.pipe(templateCache({
root: "/",
base: __dirname + "/public",
module: "App",
filename: "templates.js"
}))
.pipe(gulp.dest('public/assets/templates'))
假定 gulp 文件是 public 目录的上一级目录。它将从 src 文件的完整路径中删除基本字符串。 Base 也可以是一个函数,它将传递文件对象,这在更复杂的情况下可能会有所帮助。都在 gulp-angular-templatecache
中 index.js 的第 60 行附近您还可以使用 this gulp plugin,它可以读取您的路线、指令并将 templateUrl 替换为 templateUrl 中引用的模板。
这将消除有关在您的应用程序中处理 templateUrl 的所有麻烦。这使用相对 url 来指示 js 文件而不是绝对 url.
src
+-hello-world
|-hello-world-directive.js
+-hello-world-template.html
你好世界-directive.js:
angular.module('test').directive('helloWorld', function () {
return {
restrict: 'E',
// relative path to template
templateUrl: 'hello-world-template.html'
};
});
你好世界-template.html:
<strong>
Hello world!
</strong>
gulpfile.js:
var gulp = require('gulp');
var embedTemplates = require('gulp-angular-embed-templates');
gulp.task('js:build', function () {
gulp.src('src/scripts/**/*.js')
.pipe(embedTemplates())
.pipe(gulp.dest('./dist'));
});
gulp-angular-embed-templates 将生成以下文件:
angular.module('test').directive('helloWorld', function () {
return {
restrict: 'E',
template:'<strong>Hello world!</strong>'
};
});