Javascript Grunt从我的脚本和css中删除async和defer
我正在使用AngularJs开发一个Web应用程序,并使用Grunt进行编译和任务。当我使用service:dist编译时,Grunt不会将async/defer添加到main.css和scripts.js文件中。在grunt标记之外,我还有其他脚本使用async/defer,并且这个脚本保持async/defer Index.html:Javascript Grunt从我的脚本和css中删除async和defer,javascript,css,angularjs,gruntjs,yeoman,Javascript,Css,Angularjs,Gruntjs,Yeoman,我正在使用AngularJs开发一个Web应用程序,并使用Grunt进行编译和任务。当我使用service:dist编译时,Grunt不会将async/defer添加到main.css和scripts.js文件中。在grunt标记之外,我还有其他脚本使用async/defer,并且这个脚本保持async/defer Index.html: <!-- build:css(.tmp) styles/main.css --> <link async rel="stylesheet
<!-- build:css(.tmp) styles/main.css -->
<link async rel="stylesheet" href="styles/main.css">
<link async rel="stylesheet" href="styles/global.css">
<link async rel="stylesheet" href="styles/map.css">
<link async rel="stylesheet" href="styles/core_app.css" data-main-css="1">
<link async rel="stylesheet" href="styles/fonticons_app.css" media="screen">
<link async rel="stylesheet" type="text/css" href="styles/landing_app.css" media="screen" />
<!-- endbuild -->
<!-- build:js({.tmp,app}) scripts/scripts.js -->
<script defer src="scripts/settings.js"></script>
<script defer src="scripts/app.js"></script>
<script defer src="scripts/services/localize.js"></script>
<script defer src="scripts/services/mobiledetection.js"></script>
<script defer src="scripts/services/storage.js"></script>
<script defer src="scripts/controllers/main.js"></script>
<script defer src="scripts/controllers/general.js"></script>
<script defer src="scripts/services/api.js"></script>
<!-- endbuild -->
我进行了研究,认为问题出在Grunfile的任务usemin或filerev中,但我没有找到解决方案:
// Renames files for browser caching purposes
filerev: {
dist: {
src: [
'<%= yeoman.dist %>/scripts/{,*/}*.js',
'<%= yeoman.dist %>/styles/{,*/}*.css',
'<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
'<%= yeoman.dist %>/styles/fonts/*'
]
}
},
// Reads HTML for usemin blocks to enable smart builds that automatically
// concat, minify and revision files. Creates configurations in memory so
// additional tasks can operate on them
useminPrepare: {
html: '<%= yeoman.app %>/index.html',
options: {
dest: '<%= yeoman.dist %>',
flow: {
html: {
steps: {
js: ['concat', 'uglifyjs'],
css: ['cssmin']
},
post: {}
}
}
}
},
// Performs rewrites based on filerev and the useminPrepare configuration
usemin: {
html: ['<%= yeoman.dist %>/{,**/}*.html'],
css: ['<%= yeoman.dist %>/styles/{,*/}*.css'],
options: {
assetsDirs: ['<%= yeoman.dist %>', '<%= yeoman.dist %>/images']
}
},
//重命名文件以用于浏览器缓存
文件版本:{
地区:{
src:[
“/scripts/{,*/}*.js”,
“/styles/{,*/}*.css”,
“/images/{,*/}*{png,jpg,jpeg,gif,webp,svg}”,
“/styles/fonts/*”
]
}
},
//读取usemin块的HTML以启用自动生成的智能构建
//压缩、缩小和修订文件。在内存中创建配置,以便
//其他任务可以对它们进行操作
使用准备:{
html:“/index.html”,
选项:{
目标:'',
流量:{
html:{
步骤:{
js:['concat','uglifyjs'],
css:['cssmin']
},
职位:{}
}
}
}
},
//基于filerev和useminPrepare配置执行重写
usemin:{
html:['/{,***/}*.html'],
css:['/styles/{,*/}*.css'],
选项:{
资产目录:['',/images']
}
},
有什么想法吗?如果我正确理解了这个问题,那么问题是处理过的标记已经从中删除了async/defer?如果是,您是否查看了
usemin
任务的blockReplacements
功能
看起来您可以提供一个函数来定义如何替换资源的脚本和链接标记。例如,您可以将以下内容添加到usemin
任务的选项中,以完成您想要的任务:
blockReplacements: {
css: function(block) {
return '<link async rel="stylesheet" type="text/css" href="' + block.dest + ' />';
},
js: function(block) {
return '<script defer src="' + block.dest + '"></script>';
}
}
块替换:{
css:函数(块){
返回'