获取导入的 .less 文件以使用 au 运行 --watch in Aurelia 进行更新
Getting imported .less files to update with au run --watch in Aurelia
抱歉,这很难解释,但我希望能够更改任何更少的文件(包括导入的文件)并让它通过 watch 更新网站。
我有一个根级别(来自 src)site.less 文件。
我还有各种 less 文件分散在 src 文件夹中,我正在从 site.less 文件中导入它们。
当我 运行 au run --watch
这个初始版本正在为我的应用程序成功更新 css 时。
当我更新一个 less 文件时,它触发了刷新,但该站点没有更新。
为了解决这个问题,我更改了 aurelia_project/tasks/watch 中的监视文件。 -
我已经做到了,当一个 less 文件被更改时,它只会将我的 root less 文件添加到 pendingRefreshPaths 中。
现在,当我更改并保存一个导入的 less 文件时,它会触发手表刷新并添加适当的文件(包括根目录),但仍未更新站点。
如果我随后打开 root less 文件并在不做任何更改的情况下保存它正在做同样的事情,则不会显示任何更改。
我认为我需要查看的奇怪的事情和线索是,如果我更改 root less 文件的内容然后保存,一切都会按预期工作。
因此,我认为我需要在管道中的某个地方进行欺骗,使其认为对 root less 文件进行了真正的更改,以便来自其他 less 文件的监视实际上是成功的。
尽管在 pendingRefreshPaths 中,但忽略未更改文件的任何想法?
找到罪魁祸首,是 changedInPlace 函数过滤掉了它。
因此,如果我删除它,现在当我更改任何 .less 文件时,它会查询根 .less 文件,这显然会成功导入和编译其他文件。
export default function processCSS() {
return gulp.src(project.cssProcessor.source) <--- remove this
//.pipe(changedInPlace({firstPass:true}))
.pipe(plumber({ errorHandler: notify.onError('Error: <%= error.message %>') }))
.pipe(sourcemaps.init())
.pipe(less())
.pipe(build.bundle());
}
watch.ts
let watch = (callback?) => {
watchCallback = callback || watchCallback;
return gulpWatch(
Object.keys(watches),
{
read: false, // performance optimization: do not read actual file contents
verbose: true
},
(vinyl) => {
if (vinyl.path && vinyl.cwd && vinyl.path.startsWith(vinyl.cwd)) {
let pathToAdd = vinyl.path.substr(vinyl.cwd.length + 1);
if (pathToAdd.endsWith(".less")) {
log(`Watcher: Adding path src\site.less to pending build changes...`);
// Crude but could be moved to config to define a root
pendingRefreshPaths.push("src\site.less");
}
else {
log(`Watcher: Adding path ${pathToAdd} to pending build changes...`);
pendingRefreshPaths.push(pathToAdd);
}
refresh();
}
});
};
抱歉,这很难解释,但我希望能够更改任何更少的文件(包括导入的文件)并让它通过 watch 更新网站。
我有一个根级别(来自 src)site.less 文件。
我还有各种 less 文件分散在 src 文件夹中,我正在从 site.less 文件中导入它们。
当我 运行 au run --watch
这个初始版本正在为我的应用程序成功更新 css 时。
当我更新一个 less 文件时,它触发了刷新,但该站点没有更新。
为了解决这个问题,我更改了 aurelia_project/tasks/watch 中的监视文件。 - 我已经做到了,当一个 less 文件被更改时,它只会将我的 root less 文件添加到 pendingRefreshPaths 中。
现在,当我更改并保存一个导入的 less 文件时,它会触发手表刷新并添加适当的文件(包括根目录),但仍未更新站点。
如果我随后打开 root less 文件并在不做任何更改的情况下保存它正在做同样的事情,则不会显示任何更改。
我认为我需要查看的奇怪的事情和线索是,如果我更改 root less 文件的内容然后保存,一切都会按预期工作。
因此,我认为我需要在管道中的某个地方进行欺骗,使其认为对 root less 文件进行了真正的更改,以便来自其他 less 文件的监视实际上是成功的。
尽管在 pendingRefreshPaths 中,但忽略未更改文件的任何想法?
找到罪魁祸首,是 changedInPlace 函数过滤掉了它。
因此,如果我删除它,现在当我更改任何 .less 文件时,它会查询根 .less 文件,这显然会成功导入和编译其他文件。
export default function processCSS() {
return gulp.src(project.cssProcessor.source) <--- remove this
//.pipe(changedInPlace({firstPass:true}))
.pipe(plumber({ errorHandler: notify.onError('Error: <%= error.message %>') }))
.pipe(sourcemaps.init())
.pipe(less())
.pipe(build.bundle());
}
watch.ts
let watch = (callback?) => {
watchCallback = callback || watchCallback;
return gulpWatch(
Object.keys(watches),
{
read: false, // performance optimization: do not read actual file contents
verbose: true
},
(vinyl) => {
if (vinyl.path && vinyl.cwd && vinyl.path.startsWith(vinyl.cwd)) {
let pathToAdd = vinyl.path.substr(vinyl.cwd.length + 1);
if (pathToAdd.endsWith(".less")) {
log(`Watcher: Adding path src\site.less to pending build changes...`);
// Crude but could be moved to config to define a root
pendingRefreshPaths.push("src\site.less");
}
else {
log(`Watcher: Adding path ${pathToAdd} to pending build changes...`);
pendingRefreshPaths.push(pathToAdd);
}
refresh();
}
});
};