如何阻止node_modules文件夹进入Play Framework 2.4的目标目录

时间:2017-08-08 11:43:42

标签: scala npm playframework gruntjs sbt-0.13

我正在使用Play框架2.4我的应用程序在安装UI组件之前工作正常,例如(gruntrubynpmcpmpass)我不太了解他们但我需要这些项目UI才能工作,在播放应用的node_modules目录下有一个文件夹public,这导致每次我运行/测试项目时都会有太多时间给了runtest命令我看到很多文件夹正在开始在位置创建

playapp/target/web/classes/main/META-INF/resources/webjars/playapp/0.1.0-7708ad295b8fe2c87a28bdb6afa7c10401c12a61-SNAPSHOT/node_modules

我该怎样避免这种情况? 这是我尝试过的一些解决方案,但它没有用

项目/咕噜

import play.PlayRunHook
import sbt._

import java.net.InetSocketAddress

object Grunt {
  def apply(base: File): PlayRunHook = {

    object GruntProcess extends PlayRunHook {

      var process: Option[Process] = None

      override def beforeStarted(): Unit = {
        Process("grunt dist", base).run
      }

      override def afterStarted(addr: InetSocketAddress): Unit = {
        process = Some(Process("grunt watch", base).run)
      }

      override def afterStopped(): Unit = {
        process.map(p => p.destroy())
        process = None
      }
    }

    GruntProcess
  }
}

这是build.sbt文件的一部分 的修改

   import Grunt._
import play.PlayImport.PlayKeys.playRunHooks

import play.sbt.PlayImport.PlayKeys.playRunHooks

lazy val gruntDirectory = baseDirectory {
    _ / "public"
}

excludeFilter := HiddenFileFilter -- ".tmp"

unmanagedResourceDirectories in Assets <+= gruntDirectory { _ / "dist"}

unmanagedResourceDirectories in Assets <+= gruntDirectory { _ / ".tmp"}

unmanagedResourceDirectories in Assets <+= gruntDirectory { _ / "bower_components"}

unmanagedResourceDirectories in Assets <+= gruntDirectory { _ / "node_modules"}

//this is for development environment
unmanagedResourceDirectories in Assets <+= gruntDirectory { _ / "src" / "app"}

playRunHooks <+= baseDirectory.map(base => Grunt(base))

但仍然在目标文件夹中填充了node_modules文件夹,该文件夹在runtest命令中创建了大量文件夹,请提供帮助。 的修改

我添加了

unmanagedResourceDirectories in Assets <+= gruntDirectory { _ / "node_modules"}

这一行,但现在我觉得这个错误

[trace] Stack trace suppressed: run last playapp/web-assets:webExportedDirectory for the full output.
[error] (playapp/web-assets:webExportedDirectory) Duplicate mappings:
[error]     playapp/target/web/classes/main/META-INF/resources/webjars/arteciate/0.1.0-7708ad295b8fe2c87a28bdb6afa7c10401c12a61-SNAPSHOT/requirejs/require.js
[error] from
[error]     playapp/public/bower_components/requirejs/require.js
[error]         /home/sara/git/arteciate/public/node_modules/requirejs/require.js
[error]     playapp/target/web/classes/main/META-INF/resources/webjars/arteciate/0.1.0-7708ad295b8fe2c87a28bdb6afa7c10401c12a61-SNAPSHOT/requirejs/README.md
[error] from
[error]     playapp/public/bower_components/requirejs/README.md
[error]         playapp/public/node_modules/requirejs/README.md
[error] Total time: 5 s, completed Aug 8, 2017 5:09:17 PM

公用文件夹包含以下内容

app               bower.json  dist   Gruntfile.js   node_modules  README.md         test
bower_components  config      fonts  Gruntfile.js~  package.json  _SpecRunner.html

并且我想问一些我不了解这些UI组件的问题,所以UI工具实际上如何工作npm, yeoman, bower, sass, grunt,什么是node_modules以及它们用于什么和“做什么我实际上在构建过程中需要使用sbt“

的bower模块

1 个答案:

答案 0 :(得分:2)

作为一名scala开发人员,我认为您对这些工具如何协同工作并不感兴趣。首先,您需要了解这些工具的工作原理以及我们为什么需要它们。

我想您正在使用 Yeoman Grunt Bower SASS(通过指南针)并使用它们通过 NPM(节点包管理器)

NPM(Node Pakcage Manager):

在我们的机器中安装 node 时会安装它,它用于从npm存储库在您的机器上安装/运行不同的软件工具。

<强>约曼

它是一个Web脚手架工具,通过使用它,我们可以通过选择任何工具组合(如angular + Requirejs + SASS + Grunt等)来构建我们的Web应用程序。它通过将所有这些模块配置在一起来节省我们的时间,并且我们可以通过命令创建更多组件(即网页,控制器等),而无需担心在已创建的组件中配置/嵌入。自耕农为我们这样做。

<强>咕噜:

它是一个javascript任务运行器。您可以在GruntFile.js中配置任务并通过grunt-cli运行它(您也需要安装它)。我们可以通过使用配置自动任务的观察器来节省大量的开发时间,例如编译,连接,缩小/ uglify,运行测试用例,运行jshint / lint,每当更改等时将SASS / SCSS编译成CSS。

<强>鲍尔:

用于Web的自动依赖管理,这意味着无论何时需要在任何服务器上发送/部署,都不必将所有库与项目一起发送,通过bower,您可以安装所有依赖项只有一个命令(即 bower install ),它从bower.json文件中读取并安装所有列出的依赖项。 (内部使用git)

<强>指南针:

它是SASS / SCSS的编译器,用于将SASS / SCSS文件转换为普通的css文件。 为什么要使用SASS / SCSS? ---&gt;我们可以通过SASS / SCSS使用变量,父/子概念,继承概念,它减少了我们的工作和易于更改变量/父类,而不是改变普通css中每个元素的样式,因此它节省了我们很多开发时间并提供更好的管理机制。 (来自ruby的宝石需要安装它)

<强> node_modules:

当我们需要为javascript使用一些自动任务时,我们需要通过npm( npm install )安装它们,它读取表单package.json文件并安装package.json中列出的所有依赖项grunt或其他工具所需的文件(gulp,Compass,yeoman等)。我们也可以通过npm而不是bower来安装开发依赖项。

你真的需要node_modules吗?

如果你使用bower进行库的依赖管理,那么我们可以为你的问题找到一个解决方法,你可以将公共文件夹分开,即在你的主项目之外,并运行grunt命令来编译/构建JS / CSS文件,然后您可以将这些已编译的文件复制到公用文件夹中(您可以通过grunt配置整个过程,而不必单独管理它)然后您不会在项目目录中拥有node_modules文件夹并且它不会编译,希望它会节省你的时间。