让Livereload与Sails.js搭配使用

5
我对Sails和grunt都不太熟悉,可能会忽略一些显而易见的问题。我正在尝试在文件更改时自动刷新我的Sails应用程序中的浏览器。我使用`sails lift`启动应用程序,并在默认端口`1337`上运行。
我尝试将`options: {livereload:true}`添加到我的`grunt-contrib-watch`配置中,但据我所知,我需要以某种方式将livereload JavaScript注入到我的页面中?
我尝试使用`grunt-contrib-connect`和`livereload`选项来注入JavaScript,但它似乎只是启动另一个服务器。当我导航到启动的服务器(`localhost:8000`)时,我只看到文件夹结构。但是已经注入了livereload JavaScript。
如果可能,我想避免使用livereload Chrome插件。应该如何最佳地将livereload JavaScript注入到我的Sails应用程序中?或者我应该使用Browsersync等其他工具吗?
谢谢! :)
2个回答

6
  1. tasks/config/watch.js中添加livereload选项
    module.exports = function(grunt) {

     grunt.config.set('watch', {
        api: {

            // API files to watch:
            files: ['api/**/*', '!**/node_modules/**']
        },
        assets: {

            // Assets to watch:
            files: ['assets/**/*', 'tasks/pipeline.js', '!**/node_modules/**'],

            // When assets are changed:
            tasks: ['syncAssets' , 'linkAssets']
        },
        // ADD THIS 
        options: {
          livereload: true,
        },
    });

    grunt.loadNpmTasks('grunt-contrib-watch');
};
  1. 将livereload脚本添加到您的布局中,在</body>标签之前的某个位置,默认为views/layout.ejs
<script src="http://localhost:35729/livereload.js"></script>

除了本地主机,您可以使用服务器的IP地址或DNS名称

如果apiassets文件夹中的文件发生更改,则将刷新页面。

默认情况下,Ggrunt-contrib-watch使用35729端口。您可以指定其他端口,例如livereload: 8000

编辑: 好吧,我真的不知道这是否完全正确,但看起来您可以在config/env/development.js中覆盖布局设置。添加类似以下内容的代码:

module.exports = {
    views: {
        layout: 'dev'
    }
}

接下来,您可以创建一个单独的布局文件views/dev.ejs,在其中添加livereload脚本和其他开发参数。同样,您也可以以相同的方式添加livereload键。


谢谢你的回答。你有没有建议如何动态注入脚本标签(而不仅仅是将其添加到布局中)?因为我不想在生产模式中包含它。 - Philipp Baschke
@PhilippBaschke 我在回答中添加了一些信息,但没有测试过。 - Bulkin
你的两个建议都有效!:) 但是在使用 views/dev.ejs 时,当我执行 sails lift --prod 命令时,livereload 脚本不会显示出来。虽然我不喜欢布局的重复,但我仍然觉得通过 tasks/config/sails-linker.js 中的 devJs 可以实现。但是 它能够工作,非常感谢你! :) - Philipp Baschke
@PhilippBaschke 我认为最好的选择是在layout.ejs中添加一个环境测试,像这样:<% if(sails.config.environment == 'development' ){ %> <script src="http://localhost:35729/livereload.js"></script> <% } %> - codeKonami
@codeKonami 好像很容易呢。非常感谢你的提示! :) - Philipp Baschke
虽然这会使Livereload工作,但我注意到有时会出现循环重新加载,特别是在处理HTML或CSS资源时。我所做的是将“tasks”更改为["build"]而不是["syncAssets",..etc.]。希望这也能帮助其他人。 - Joshua

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接