- 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/
好吧,我知道这个问题已经被问了无数次了。但是,对于我在谷歌搜索中似乎无法找到的问题,我还有一个小补充。 我当然不是 FFMPEG 的专家……我一直在使用 FFMPEG 的标准加速/减速模板,我正在使用
考虑这三个文档... [ { _id: "...", _rev: "...", title: "Foo", body: "...
我想知道访问我的全局变量的最快方法...它们只会在 Beta 测试阶段发生变化。在我们上线之前。从那时起,它们将永远不会改变。 我认为从 web.config 中获取内容会产生开销,而且编写 App.
这个问题在这里已经有了答案: 11 年前关闭。 Possible Duplicate: Is there a performance difference between BETWEEN and IN
我很想知道对通常作为查询目标的数字列进行分区是否有性能优势。目前我有一个包含约 5000 万条记录的物化 View 。当使用常规 b 树索引并按此数字列搜索时,我得到的成本为 7,查询结果大约需要 0
我需要编写一个库,它执行许多远程 HTTP 调用来获取内容。我可以按照描述做here ,但是有没有更好的方法(在性能方面)如何做到这一点?如果我按照示例中所述进行操作,我总是会创建一个 URL 对象,
该代码非常不言自明。只是有很多我需要独立随机化的范围。例如,范围('W1:W4')不应与范围('W5:W8')混淆,因此我不能只是随机化范围('W1:W80')。任何帮助或建议都会很棒!多谢。目前,代
我正在使用 ADT 模拟器。我在我的模拟器中使用默认的 Android 虚拟设备。我创建了一个版本 4.0.3。 问题 太慢了。有时我在尝试更改 fragment 时会收到加载点击。 我使用的代码是有
我正在尝试获取一个包含三个表中的信息的数组。结果应该是一个数组,我可以在其中循环遍历第一个表、第二个表中的相关行以及第三个表到第二个表中的相关行。目前,我有三个独立的 SQL 查询,然后将它们重组为一
我已经学会了两种在服务器上上传图像的方法(可能还有更多..)。 1) 创建 NSData 并将其添加到请求正文中 2)创建字节数组并像简单数组一样以json形式发送 1) 创建 NSData 并将其添
我有一个 UItextview,我可以在里面写入数据类,我可以在我的 View 中的任何地方提供数据,在 ViewDidAppear 函数中我传递了我的数据,但它有点慢。文本在 0.2-0.3 秒后出
如何为 discoverAllContactUserInfosWithCompletionHandler 创建优先级高于默认值的 CKOperation? 我找不到不使用 [[CKContainer
我在 unix 模块下编写了一个内核级函数,用于对系统负载进行采样。我在 clock.c 下的 clock() 中调用示例函数,以在每个时钟(例如,我的系统上每 10 毫秒)拍摄系统负载的快照。有没有
我正在制作一个应用程序,该应用程序将根据变量的值使用鼠标/键盘(宏)模拟操作。 这里有我制作的 de 扫描代码: void ReadMemory(int value){ DWORD p
我想知道在计算上调用嵌套在对象中的函数的最快方法是什么,所以我做了一个快速的 jsPerf.com 基准测试,其中我考虑了三种可能性——从数组中调用函数,从“核心”中调用函数对象和函数对象: var
我用 php 做了一个图像缩放器。调整图像大小时,它会缓存一个具有新尺寸的新 jpg 文件。下次您调用确切的 img.php?file=hello.jpg&size=400 时,它会检查是否已经创建了
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Which is best for data store Struct/Classes? 考虑我有一个 Em
我正在尝试为多组列自动计算每行的平均分数。例如。一组列可以代表不同比例的项目。这些列也被系统地命名 (scale_itemnumber)。 例如,下面的虚拟数据框包含来自三个不同比例的项目。(可能会出
所以我知道散列图使用桶和散列码等等。根据我的经验,Java 哈希码并不小,但通常很大,所以我假设它没有在内部建立索引。除非哈希码质量很差导致桶长度和桶数量大致相等,否则 HashMap 比名称-> 值
假设我有一个非常缓慢和大的 for 循环。 如何将其拆分为多个线程以使其运行速度更快? for (int a = 0; a { slowMet
我是一名优秀的程序员,十分优秀!