【问题标题】:Play framework - access assets on runtimePlay 框架 - 在运行时访问资产
【发布时间】:2014-12-18 17:01:59
【问题描述】:

再见。

我尝试实现的目标:在能够编辑 chrome 开发工具中的 javascript 和 lessfiles 的同时使用 play。

我发现:如果您将项目的“公共”文件夹添加到 chrome 开发工具的资源选项卡中的工作区,一切都会按预期工作。在 chrome 开发工具中所做的更改会保存到相应的 css 和 javascript 文件中,并且页面会实时反映更改。 如果您将“app/assets/stylesheets”目录添加到 chrome 开发工作区,也会发生同样的情况 --> 对控制台中的文件所做的更改将保存到保存在光盘上的文件中。

此外,如果您从控制台运行“activator ~run”,对任何需要编译的文件所做的更改都会触发重新编译。我到了那个地步,我可以在开发工具中更改我的更少代码。更改写入本地文件并重新编译播放。一切都很好,花花公子,遗憾的是 - 一切都结束了:/

问题:我使用较少,并且较少被编译到某个神秘的地方(我还没有弄清楚到底在哪里)。如果我不知道目录,我无法将 css 文件(从 less 文件编译)添加到 chrome 开发控制台中的工作区 - 这意味着 chrome 不知道何时重新绘制页面并且我得到一个“资源”控制台中出现“不可用”错误。 首先,我认为实际设置页面样式的 css 存储在项目的“目标”文件夹中,但事实并非如此。 (我将目标文件夹添加到工作区,但是更改此文件夹中的css文件并没有反映在页面上)

我的问题:从less文件编译后的css在哪里? 或者是否有其他方法可以在浏览器中启用实时编辑 less(或任何已编译的脚本/样式源)?

【问题讨论】:

    标签: compilation less google-chrome-devtools playframework-2.3 livecoding


    【解决方案1】:

    好的,我想通了。对于所有想知道如何实时编辑您的游戏项目的较少文件并将更改保存到源文件的人,这是我实现它的方法。此解决方案适用于在样式上使用较少的 playframework 开发人员 - 尽管我认为您应该能够使用每个 css 预处理器以类似的方式解决问题。请注意,我使用 Chrome 开发工具实时编辑我的代码:

    首先你必须将这行代码添加到你的 build.sbt 中:

    //enable source Map for lesscompilation
    LessKeys.sourceMap in (Assets, LessKeys.less) := true
    

    您需要 source Map 以便 Chrome 开发工具可以将 css 映射到相应的 lessfiles。重新编译后,在 chrome 中重新加载项目并按 f12 以调出 Chrome 开发工具。您的 Less 文件应该正确映射:

    https://s3.amazonaws.com/robdodson/images/less-preview.png

    请注意,侧面板指向“modules.less”--> 单击此指针会弹出 Sources 面板并打开相应的文件。如果您进入,编辑文件并按 ctrl s 进行保存,但没有任何反应。那是因为 Chrome 开发工具不知道将更改保存到磁盘的位置。


    要告诉 Chrome 开发工具在哪里保存更改,您需要设置一个工作区。为此,请打开 Chrome 开发工具中的“源”面板。在左侧,您有一个文件树。右键单击该面板,然后单击“将文件夹添加到工作区”。工作区将您的本地文件映射到 URL,反之亦然。这是 Chrome 开发工具工作区深入解释的链接:

    https://developer.chrome.com/devtools/docs/workspaces

    我必须选择的文件夹位于此处:

    pathToYourProject/target/web/public/main

    现在这令人困惑,因为正如 @Bass Jobsen 在他的帖子中提到的那样:

    https://www.playframework.com/documentation/2.0/AssetsLess告诉你:

    请注意,托管资源不会直接复制到您的 应用程序公用文件夹,但维护在一个单独的文件夹中 目标/scala-2.9.1/resources_managed。

    但就我而言,“target/sacal-2.9.1”中没有“resources_managed”这样的文件夹。经过几个小时的混淆,我发现该页面使用的文件对应于位于“pathToYourProject/target/web/public/main”中的文件。可能只有我一个人,欢迎评论。


    配置工作区后,实时编辑仍然无法工作。这是由于需要编译的事实较少。那么如果你不重新编译 less 文件,css 怎么能知道发生了什么变化呢?要启用实时编辑,您需要查看您的 less 文件并在发生更改时将它们编译为 css。我使用 grunt 完成该任务:

    http://gruntjs.com/getting-started

    我不会详细介绍 grunt,它有据可查。我将发布我使用的 gruntfile。如您所见,grunt 监听文件夹“target/web/public/main/stylesheets”中较少文件的所有更改。如果发生更改,则启动任务“less”,重新编译文件“final.less”(这是导入所有其他less-files的文件)​​。重新编译后,grunt 将所有 .less 文件复制到项目的“app/assets/stylesheets”目录下。这对于将 Chrome 开发工具中的 less 文件所做的更改带到项目的实际 less 文件中是必要的。 我用过

    这是文件:

    module.exports = function(grunt){
        grunt.initConfig({
            less: {
                  development:{
                    options:{
                        sourceMap: true,
                  },
                    files:{
                        'target/web/public/main/stylesheets/final.css':'target/web/public/main/stylesheets/final.less',
                    }
                  }
            },
            watch: {
                styles:{
                    options:{
                        livereload: true,
                        spawn: false,
                        event: ['added','deleted','changed']
                    },
                    files:['target/web/public/main/stylesheets/**/*.less'],
                    tasks:['less','copy']
                }
            },
            copy: {
                main: {
                    files: [
                        {expand: true, cwd: 'target/web/public/main/stylesheets/', src:['**/*.less'], dest:'app/assets/stylesheets/'}
                    ]
                }
            }
    
        });
    
        grunt.loadNpmTasks('grunt-contrib-copy');
        grunt.loadNpmTasks('grunt-contrib-less');
        grunt.loadNpmTasks('grunt-contrib-watch');
    }
    


    这就是我在 Chrome 开发工具中设置 less with play 实时编辑的方式。请注意,您无法在开发工具的 Elements 面板中编辑 less 文件。在那里所做的更改将删除 less 和 css 文件的映射。但是,如果您按住 ctrl 单击属性或类,您将被带到源面板中的相应文件和类/属性。保存的更改将触发重新编译 less 文件和繁荣 --> 你正在编辑你的页面:) 我希望我能在这篇文章中帮助别人。

    链接和来源:

    【讨论】:

      【解决方案2】:

      https://www.playframework.com/documentation/2.0/AssetsLess告诉你:

      请注意,托管资源不会直接复制到您的 应用程序公用文件夹,但维护在一个单独的文件夹中 目标/scala-2.9.1/resources_managed。

      【讨论】:

      • 是的,我读过这个。我不知道为什么,但这个文件夹在我的项目中不存在 - 有点混乱
      猜你喜欢
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      相关资源
      最近更新 更多