【问题标题】:Getting gulp to work with livereload让 gulp 与 livereload 一起工作
【发布时间】:2014-02-19 22:29:27
【问题描述】:

我有我的Gulpfile 来编译我的sass 并且我只是一个“live-reload 远离倾销codekit”。我正在努力让这种风格注入工作。我正在尝试设置:https://github.com/vohof/gulp-livereload

当我在终端中运行 gulp 时,它似乎编译了 sass,但它没有注入样式。我究竟做错了什么?我在 chrome + 以下节点模块中安装了 livereload 扩展:

  "devDependencies": {
    "gulp": "~3.5.0",
    "gulp-sass": "~0.6.0"
  },
  "dependencies": {
    "gulp-livereload": "~0.2.0",
    "tiny-lr": "0.0.5"
  }

我的 gulpfile 看起来像这样:

var gulp = require('gulp');

//plugins
var sass = require('gulp-sass'),
    lr = require('tiny-lr'),
    livereload = require('gulp-livereload'),
    server = lr();

gulp.task('sass', function () {
    gulp.src('./scss/*.scss')
        .pipe(sass())
        .pipe(gulp.dest('./'))
        .pipe(livereload(server));
});


// Rerun tasks when a file changes
gulp.task('watch', function () {
    server.listen(35729, function (err) {

        if (err) return console.log(err);

        gulp.watch('scss/**/*.scss', ['sass']);

    });
});





// The default task (called when you run 'gulp' from cli)
// "sass" compiles the sass to css
// "watch" looks for filechanges, and runs tasks accordingly
gulp.task('default', ['sass', 'watch']);

非常感谢任何帮助。 谢谢!

【问题讨论】:

  • “它不注入样式”是什么意思?是否将您的 sass 编译到正确的目录?
  • 是的。我的 index.html 链接到这个:
  • 当我重新加载浏览器时,样式生效。但我必须手动完成
  • 您是否正在运行本地主机?从 Chrome 中的插件进入设置并检查文件 url 的选项
  • 您的浏览器中是否安装了livereload 插件? (或者,您可以使用gulp-embedlr 将 LR javascript 注入您的网页,无需浏览器插件。)

标签: sass livereload gulp


【解决方案1】:

我已通过浏览器扩展启用 livereload,但我需要做的最后一件事是单击此按钮以在单个选项卡上“激活”它。

【讨论】:

    【解决方案2】:

    这是我的解决方案

    • 只需要这个 npm 模块 npm install gulp gulp-sass gulp-livereload express --save-dev

    • 将Scss-Files 放入/app/styles,将Html-Files 放入/app/

    • 为 Chrome 安装 live-reload-plugin

    • 转到http://localhost:4000 并激活当前选项卡的插件

    完成:-)

    (不要忘记更改项目的 sass 设置。如果您使用的是 scss 而不是 sass,请将 indentedSyntax 设置为 false

    var gulp = require('gulp'),
      sass = require('gulp-sass'),
      livereload = require('gulp-livereload');
    
    gulp.task('sass', function() {
      gulp.src('app/styles/*.sass')
        .pipe(sass({
          includePaths: ['app/styles'],
          indentedSyntax : true,
          errLogToConsole: true
        }))
        .pipe(gulp.dest('app/css'))
        .pipe(livereload());
    });
    
    gulp.task('serve', function(done) {
      var express = require('express');
      var app = express();
      app.use(express.static(__dirname + '/app'));
      app.listen(4000, function () {
         done();
      });
    });
    
    gulp.task('html', function() {
      gulp.src('app/**/*.html')
        .pipe(livereload());
    });
    
    gulp.task('watch', function() {
      gulp.watch('app/styles/*.sass', ['sass']);
      gulp.watch('app/**/*.html', ['html']);
    
      livereload.listen();
    });
    
    gulp.task('default', ['watch', 'serve']);
    

    【讨论】:

      【解决方案3】:

      我在不需要浏览器插件的情况下运行 gulp 和 livereload。

      var http = require('http')
      , path = require('path')
      , Promise = Promise || require('es6-promise').Promise
      , express = require('express')
      , gulp = require('gulp')
      , log = require('gulp-util').log
      , tinylr = require('tiny-lr')
      , livereload = require('gulp-livereload')
      
      , ROOT = 'dist'
      , GLOBS = [path.join(ROOT, "/**/*")]
      , PORT = 8000
      , PORT_LR = PORT + 1
      
      , app = express()
      ;
      
      app.use(require('connect-livereload')({port: PORT_LR}))
      app.use('/', express.static("./dist"))
      
      http.createServer(app).listen(PORT, function() {
        log("Started express server on http://localhost:" + PORT);
      });
      
      lrUp = new Promise(function(resolve, reject) {
        lrServer = tinylr()
        lrServer.listen(PORT_LR, function(err) {
          if (err) return reject(err)
          resolve(lrServer)
        })
      })
      
      gulp.watch(GLOBS, function(evt) {
        if (evt.type === 'deleted') return
      
        lrUp.then(function(lrServer) {
          log("LR: reloading", path.relative(ROOT, evt.path));
          gulp.src(evt.path).pipe(livereload(lrServer))
        })
        .catch(console.log)
      });
      

      享受:)

      【讨论】:

        【解决方案4】:

        刚刚看到这个精彩的教程,解释了使用 Gulp 启动和运行 Livereload 的所有要点:

        http://rhumaric.com/2014/01/livereload-magic-gulp-style/

        【讨论】:

          【解决方案5】:

          如果您使用gulp-livereload,我认为使用tiny-lr 也没有意义。

          您可以在此处找到 LiveReload 集成的工作示例:

          https://github.com/kriasoft/spa-seed.front-end - SPA 前端入门套件

          【讨论】:

          • 如果您想使用与默认端口不同的端口,我在仅使用 gulp-livereload 之前遇到了问题。使用 tiny-lr 解决了这个问题
          • gulp-livereload 在没有 tiny-lr 的情况下工作正常: livereload = require('gulp-livereload'); var lr = livereload.listen( { 端口:12345,自动:假 } ); .. 及以后... .pipe( livereload( { port: 12345 } ) )
          【解决方案6】:

          您是否正在运行本地主机?从 Chrome 中的插件进入设置并检查文件 url 的选项:chrome://extensions/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-02
            • 2013-07-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-12
            相关资源
            最近更新 更多