将 livereload 添加到西兰花
add livereload to broccoli
我正在尝试添加 livereload to broccoli
不幸的是,live-reload 插件文档有点短,我无法使用它。在文档中规定要执行以下操作:
var injectLivereload = require('broccoli-inject-livereload');
var public = injectLivereload('public');
我想这应该放在 Brocfile.js
里面(对吧?)。但是无论我做什么,都不会重新加载(我必须点击重新加载才能刷新)我还更改了 'public'
部分,我认为它代表一个目录。任何帮助将不胜感激。
我正在使用 BrowserSync 而不是 "only" LiveReload。它还支持 LiveReload(和 CSS 的 LiveInject),但它还有大量其他功能(如重影)。
让我们在其旁边创建一个名为 server.js
的文件和一个名为 app
的文件夹,您可以在其中放置我们的 index.html
、.css
和 .js
。此 server.js
包含:
var broccoli = require("broccoli");
var brocware = require("broccoli/lib/middleware");
var mergeTrees = require("broccoli-merge-trees");
var Watcher = require("broccoli-sane-watcher");
var browserSync = require("browser-sync");
var tree = mergeTrees(["app"]); // your public directory
var builder = new broccoli.Builder(tree);
var watcher = new Watcher(builder);
watcher.on("change", function(results) {
if (!results.filePath) return;
// Enable CSS live inject
if (results.filePath.indexOf("css") > -1) {
return browserSync.reload("*.css");
}
browserSync.reload();
});
browserSync({
server: {
baseDir: "./",
middleware: brocware(watcher)
}
});
现在启动服务器(这将自动打开浏览器):
node server.js
我知道这并不像 Gulp 或第一眼看到的 Grunt 那样简单,但它提供了对所有内容的细粒度控制,而且速度非常快,即使您的应用程序不断增长也是如此。
我选择通过 Broccoli Browser Sync plugin
使用 Browsersync 而不是 Livereload
我的最终 Brocfile.js
与(从插件 npm 页面中提取)非常相似:
var fastBrowserify = require('broccoli-fast-browserify');
var babelify = require('babelify');
var mergeTrees = require('broccoli-merge-trees');
var compileSass = require('broccoli-sass-source-maps');
var funnel = require('broccoli-funnel');
var BrowserSync = require('broccoli-browser-sync');
var optionalTransforms = [
'regenerator'
// 'minification.deadCodeElimination',
// 'minification.inlineExpressions'
];
var babelOptions = {stage: 0, optional: optionalTransforms, compact: true};
// var browserifyOpts = {deps: true, entries: files, noParse: noParse, ignoreMissing: true};
var transformedBabelify = fastBrowserify('app', {
browserify: {
extensions: [".js"]
},
bundles: {
'js/app.js': {
entryPoints: ['app.js'],
transform: {
tr: babelify,
options: {
stage: 0
}
}
}
}
});
var appCss = compileSass(['piggy/frontend/app'], 'main.scss', 'css/app.css');
var staticFiles = funnel('frontend', {
srcDir: 'static'
});
var browserSync = new BrowserSync([staticFiles, transformedBabelify, appCss]);
module.exports = mergeTrees([staticFiles, transformedBabelify, appCss, browserSync]);
有了这个解决方案,我可以继续使用西兰花通过 broccoli serve
为我的资产提供服务,我的所有资产都将被重建,然后重新加载到浏览器中,包括我的 css.
我正在尝试添加 livereload to broccoli
不幸的是,live-reload 插件文档有点短,我无法使用它。在文档中规定要执行以下操作:
var injectLivereload = require('broccoli-inject-livereload');
var public = injectLivereload('public');
我想这应该放在 Brocfile.js
里面(对吧?)。但是无论我做什么,都不会重新加载(我必须点击重新加载才能刷新)我还更改了 'public'
部分,我认为它代表一个目录。任何帮助将不胜感激。
我正在使用 BrowserSync 而不是 "only" LiveReload。它还支持 LiveReload(和 CSS 的 LiveInject),但它还有大量其他功能(如重影)。
让我们在其旁边创建一个名为 server.js
的文件和一个名为 app
的文件夹,您可以在其中放置我们的 index.html
、.css
和 .js
。此 server.js
包含:
var broccoli = require("broccoli");
var brocware = require("broccoli/lib/middleware");
var mergeTrees = require("broccoli-merge-trees");
var Watcher = require("broccoli-sane-watcher");
var browserSync = require("browser-sync");
var tree = mergeTrees(["app"]); // your public directory
var builder = new broccoli.Builder(tree);
var watcher = new Watcher(builder);
watcher.on("change", function(results) {
if (!results.filePath) return;
// Enable CSS live inject
if (results.filePath.indexOf("css") > -1) {
return browserSync.reload("*.css");
}
browserSync.reload();
});
browserSync({
server: {
baseDir: "./",
middleware: brocware(watcher)
}
});
现在启动服务器(这将自动打开浏览器):
node server.js
我知道这并不像 Gulp 或第一眼看到的 Grunt 那样简单,但它提供了对所有内容的细粒度控制,而且速度非常快,即使您的应用程序不断增长也是如此。
我选择通过 Broccoli Browser Sync plugin
使用 Browsersync 而不是 Livereload我的最终 Brocfile.js
与(从插件 npm 页面中提取)非常相似:
var fastBrowserify = require('broccoli-fast-browserify');
var babelify = require('babelify');
var mergeTrees = require('broccoli-merge-trees');
var compileSass = require('broccoli-sass-source-maps');
var funnel = require('broccoli-funnel');
var BrowserSync = require('broccoli-browser-sync');
var optionalTransforms = [
'regenerator'
// 'minification.deadCodeElimination',
// 'minification.inlineExpressions'
];
var babelOptions = {stage: 0, optional: optionalTransforms, compact: true};
// var browserifyOpts = {deps: true, entries: files, noParse: noParse, ignoreMissing: true};
var transformedBabelify = fastBrowserify('app', {
browserify: {
extensions: [".js"]
},
bundles: {
'js/app.js': {
entryPoints: ['app.js'],
transform: {
tr: babelify,
options: {
stage: 0
}
}
}
}
});
var appCss = compileSass(['piggy/frontend/app'], 'main.scss', 'css/app.css');
var staticFiles = funnel('frontend', {
srcDir: 'static'
});
var browserSync = new BrowserSync([staticFiles, transformedBabelify, appCss]);
module.exports = mergeTrees([staticFiles, transformedBabelify, appCss, browserSync]);
有了这个解决方案,我可以继续使用西兰花通过 broccoli serve
为我的资产提供服务,我的所有资产都将被重建,然后重新加载到浏览器中,包括我的 css.