我正在使用Play框架2.4我的应用程序在安装UI组件之前工作正常,例如(grunt
,ruby
,npm
,cpmpass
)我不太了解他们但我需要这些项目UI
才能工作,在播放应用的node_modules
目录下有一个文件夹public
,这导致每次我运行/测试项目时都会有太多时间给了run
或test
命令我看到很多文件夹正在开始在位置创建
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文件夹,该文件夹在run
和test
命令中创建了大量文件夹,请提供帮助。
的修改
我添加了
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“
答案 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文件夹并且它不会编译,希望它会节省你的时间。