- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 LESS 和 grunt watch 来动态编译更改的基本应用程序。
很长一段时间以来,我一直在提示这样一个事实:当我更改任何 LESS 文件时,所有文件都会重新编译。无法只编译需要的内容真是浪费我的时间。但我希望它聪明,所以如果有任何导入
,它也会编译受影响的文件,而不仅仅是被修改的文件。
今天我决定解决这个问题。这一点都不容易。 Grunt watch 不处理这个问题,即使使用 grunt-newer 也不起作用,在这两种情况下都需要编写自定义规则。
最后我没有使用https://github.com/tschaub/grunt-newer因为它不能很好地与 grunt-sync 配合使用,但更重要的是,因为它不符合我对 LESS 的需求,因为它无法处理 LESS 导入的内容,因此它不会编译相关文件,而只会编译那些已经改变了,它不“聪明”。
(可以对其进行自定义以考虑此类内容,并且人们在要点上提供了一些脚本,但没有任何官方存储库,因此很难找到您需要的内容,但绝对可以值得一看。)
<小时/>这个问题已经被多次提出,但没有真正或简单的答案。请参阅:
How do you watch multiple files, but only run task on changed file, in Grunt.js?
Grunt watch: compile only one file not all
Grunt watch less on changed file only
Grunt: Watch multiple files, Compile only Changed
最佳答案
我的解决方案是一个自定义解决方案,特定于我的应用程序,但我希望它也可以用于您的应用程序!这非常简单。
假设您有一个 styles
文件夹,其中包含多个文件和目录(较少),那么我的解决方案是定义一个文件夹白名单,我不会为其编译所有文件和目录较少的文件,但仅限于已更改的文件。
无 Grunt 配置: https://gist.github.com/Vadorequest/bd46bb4d6c326e837710
Grunt-watch 配置: https://gist.github.com/Vadorequest/b48bcfda2d0205ba3f95
到目前为止,处理此问题的“最简单”方法是覆盖 grunt.watch
事件,以检查更改的文件是否会影响其他文件。有多种方法,具体取决于您自己的架构。我的很简单,因为影响所有其他文件的文件要么位于 styles 文件夹的根目录中,要么位于子文件夹内。所以我“只是”必须检查文件的 filePath
是否属于白名单。如果是这样,那么我会动态更新 grunt 配置,更改属性 src
以仅匹配更改后的文件名。
grunt.event.on('watch', function(action, filePath, watchedTargetName) {
switch(watchedTargetName){
/*
Compile only what is needed.
Based on a white list of sub folders within the "styles" directory.
White listed folders will not require to compile all LESS file, but only the changed ones.
Others will require to compile everything.
*/
case 'styles':
// Root path from where the files are located.
var rootPath = 'assets/linker/styles/';
// Path of the file
var filePathRelativeToRootPath = path.relative(rootPath, filePath);
// Grunt task name (see less.js)
var gruntTask = 'less';
// Sub task to use.
var subTaskName = 'dev';
// List of folders that don't need to recompile everything.
var whiteListFolders = [
'common',
'devices',
'layous',
'themes',
'views',
];
if(action === 'changed'){
var isDir = path.dirname(filePath) !== '';
var dirName = filePathRelativeToRootPath.split(path.sep)[0];
// If the file is a directory and is belongs to the white list then we will override the grunt config on the fly to compile only that file.
if(isDir && _.contains(whiteListFolders, dirName)){
// We load the less config located at tasks/config/less.js
var config = grunt.config(gruntTask);
// Checks for any misconfiguration.
if(!config){
log.error('There is no config for the grunt task named ' + gruntTask);
}
if(!config[subTaskName]){
log.error('There is no sub task named ' + subTaskName + " for the the grunt task named " + gruntTask);
}
// Update the files.src to be the path to the modified file (relative to srcDir).
// Instead of updating all files, it will only update the one that has been changed.
config[subTaskName].files[0].src = filePathRelativeToRootPath;
grunt.config("less", config);
console.info('watcher LESS - The file ' + filePath + ' is in the white list and will be updated alone.');
}else{
console.info('watcher LESS - The file ' + filePath + ' is not is the white list, all LESS files will be updated.');
}
}
break;
}
} );
基本上,如果我更改 themes
目录中名为 ayolan.less
的文件,那么当我更新它时,内存中将设置的内容如下。 (参见https://gist.github.com/Vadorequest/b48bcfda2d0205ba3f95#file-watch-js-L80-L81)
{
dev: {
files: [{
expand: true,
cwd: 'assets/linker/styles/',
src: 'themes/ayolan.less',// This has been changed in memory, for this specific watch event.
dest: '.tmp/public/linker/styles/',
ext: '.css'
}]
}
}
这允许我现在使用 http://www.browsersync.io/在我对 LESS 文件进行简单更改后大约 1 秒(大约 5 秒前),它将更新浏览器,因为它必须编译所有 LESS 文件并复制它们。 (我还进行了其他性能更改,但这绝对有助于实现该目标!)
关于node.js - Grunt watch & LESS - 如何让它更快? (仅编译已更改的文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045268/
SO亲爱的 friend 们: 2014 年 3 月 18 日。我正在处理一种情况,在使用 ng-repeat 时,数组内的元素(我从 Json 字符串中获取)更改了原始顺序。 需要明确的是,数组中的
有很多问题询问如何在 JavaScript 单击处理程序中更改 div 的类,例如,此处:Change Div style onclick .我理解得很好(只需更改 .className),并且它有效
我从access导入了一个数据库到mysql,但其中一个表的列名“股数”带有空格,但我尝试更改、替换甚至删除列名,但失败了。任何人都可以帮助解决这一问题 String UpdateQuary = "U
我正在做一个随机的学校元素。 目前,我有一个包含两个 CSS 的页面。一种用于正常 View ,一种用于残障人士 View 。 此页面还包括两个按钮,它们将更改使用的样式表。 function c
我需要使用 javascript 更改 HTML 元素中的文本,但我不知道该怎么做。 ¿有什么帮助吗? 我把它定义成这样: Text I want to change. 我正在尝试这样做: docum
我在它自己的文件 nav_bar.shtml 中有一个主导航栏,每个其他页面都包含该导航栏。这个菜单栏是一个 jQuery 菜单栏(ApyCom 是销售这些导航栏的公司的名称)。导航栏上的元素如何确定
我正在摆弄我的代码,并开始想知道这个变化是否来自: if(array[index] == 0) 对此: if(!array[index] != 0) 可能会影响任何代码,或者它只是做同样的事情而我不需
我一直在想办法调整控制台窗口的大小。这是我正在使用的函数的代码: #include #include #define WIDTH 70 #define HEIGHT 35 HANDLE wHnd;
我有很多情况会导致相同的消息框警报。 有没有比做几个 if 语句更简单/更好的解决方案? PRODUCTS BOX1 BOX2 BOX3
我有一个包含这些元素的 XELEMENT B Bob Petier 19310227 1 我想像这样转换前缀。 B Bob Pet
我使用 MySQL 5.6 遇到了这种情况: 此查询有效并返回预期结果: select * from some_table where a = 'b' and metadata->>"$.countr
我想知道是否有人知道可以检测 R 中日期列格式的任何中断的包或函数,即检测日期向量格式更改的位置,例如: 11/2/90 12/2/90 . . . 15/Feb/1990 16/Feb/1990 .
我希望能够在小部件显示后更改 GtkButton 的标签 char *ButtonStance == "Connect"; GtkWidget *EntryButton = gtk_button_ne
我正在使用 Altera DE2 FPGA 开发板并尝试使用 SD 卡端口和音频线路输出。我正在使用 VHDL 和 C 进行编程,但由于缺乏经验/知识,我在 C 部分遇到了困难。 目前,我可以从 SD
注意到这个链接后: http://www.newscientist.com/blogs/nstv/2010/12/best-videos-of-2010-progress-bar-illusion.h
我想知道在某些情况下,即使剧本任务已成功执行并且 ok=2,ansible 也会显示“changed=0”。使用 Rest API 和 uri 模块时会发生这种情况。我试图找到解释但没有成功。谁能告诉
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: add buttons to push notification alert 是否可以在远程通知显示的警报框中指定有
当您的 TabBarController 中有超过 5 个 View Controller 时,系统会自动为您设置一个“更多” View 。是否可以更改此 View 中导航栏的颜色以匹配我正在使用的颜
如何更改.AndroidStudioBeta文件夹的位置,默认情况下,该文件夹位于Windows中的\ .. \ User \ .AndroidStudioBeta,而不会破坏任何内容? /编辑: 找
我目前正在尝试将更具功能性的编程风格应用于涉及低级(基于 LWJGL)GUI 开发的项目。显然,在这种情况下,需要携带很多状态,这在当前版本中是可变的。我的目标是最终拥有一个完全不可变的状态,以避免状
我是一名优秀的程序员,十分优秀!