Coffeescript 带垫片的require.js的丑化不';我不想用咖啡脚本来写剧本2
我从事Play2.1.2项目,使用Angular.js、CoffeeScript、require.js和bower组织前端。 对于bower,我在Coffeescript 带垫片的require.js的丑化不';我不想用咖啡脚本来写剧本2,coffeescript,playframework-2.0,requirejs,Coffeescript,Playframework 2.0,Requirejs,我从事Play2.1.2项目,使用Angular.js、CoffeeScript、require.js和bower组织前端。 对于bower,我在/app/assets/javascripts/main.coffee文件中使用了shim。 然后我使用play clean stage部署并运行target/start 问题是:在阶段阶段,Play不会丑化资源。 在Build.scala中: val main = play.Project(appName, appVersion, appDepend
/app/assets/javascripts/main.coffee
文件中使用了shim。
然后我使用play clean stage
部署并运行target/start
问题是:在阶段
阶段,Play不会丑化资源。
在Build.scala
中:
val main = play.Project(appName, appVersion, appDependencies).settings(
requireJs += "main",
requireJsShim += "main.js"
)
然后在阶段中丑化css之后:
Tracing dependencies for: main
Error: Load timeout for modules: angular-bootstrap,angular
http://requirejs.org/docs/errors.html#timeout
In module tree:
main
jquery
Error: Load timeout for modules: angular-bootstrap,angular
http://requirejs.org/docs/errors.html#timeout
In module tree:
main
jquery
[info] RequireJS optimization finished.
所以没有什么是丑陋的。在main.coffee中
:
require.config
paths:
jquery: "lib/jquery/jquery"
angular: "lib/angular/angular"
...
shim:
angular: {deps: ["jquery"], exports: "angular"}
...
define [
"angular-bootstrap"
"angular"
...
], ->
app = angular.module "app"
...
app
它在客户端工作得很好,所有路径都正确等等。
requireJsShim+=“main.js”
看起来也很正确:require.js优化似乎是在编译资产之后进行的,因此main.coffee
或只是main
不起作用
你知道问题的根源是什么吗?以前有人遇到过吗?我有一个使用垫片的应用程序,我刚才回答了一个与您非常相似的问题。简而言之,垫片会覆盖文件 最终解决我的问题的方法是创建自定义
shim.coffee
,其中包含部分require.config
:
require.config
paths:
jquery: "lib/jquery/jquery"
angular: "lib/angular/angular"
...
不带垫片
零件
然后,我必须在define
子句中显式定义填充依赖项,并使用requirejshim+=“shim.js”
——与我用于客户端配置的文件不同
然后uglifying和require.js优化开始工作 我确实遇到了这个问题(几乎;我的项目中没有使用CoffeeScript),结果我认为解决这个问题更容易。重申这个问题:某些JavaScript资源,特别是那些在其垫片中没有
export
设置的资源,会产生上面所述的“模块加载超时”。更糟糕的是,问题似乎是暂时的
将RequireJS配置(例如,路径
,垫片
)与模块分离似乎有帮助,但编译仍然不可靠,这使得在开发模式下工作更加复杂
我发现将waitSeconds:0
添加到配置对象有助于可靠的构建。我无法理解为什么在编译过程中访问本地资源甚至可能出现超时。有关详细信息,请参阅
下面是我的RequireJS模块的一个片段,位于public/javascripts
(您的路径可能会有所不同)
main.coffee不是目标,而是main.js(编译后)。你的目标文件夹中没有main.js吗(在start命令下)?[info]({appDir:“javascripts”,[info]baseUrl:“.”,[info]dir:“javascripts min”,maincigfile:“javascripts/shim.js”,模块:[{name:“main”}})错误:/var/www/play scala backbone todo/target/scala-2.10/classes/public/javascripts/shim.js不存在。我克隆了您的示例,但在
播放阶段找不到shim.js
——它在最近的提交中被删除。因此require.js优化失败。它仅适用于require.config
中的路径,但不适用于shim
——我必须明确说明shim-deps:(是的,我会厌倦像require js文档使用shim一样处理Play shim,即包括DEP和导出。这更像是一个require文件检查lol…以找出丑化所需的依赖文件。看起来很棒,Michael,谢谢分享。我今天就试试。嗯,它真的很有效(我所做的唯一更改是在build.scala中添加以main.js为目标的shim,这是由于coffeescript处理)。因此,现在我不需要支持shim.coffee,waitSeconds:0不会影响应用程序,因为所有依赖项都是本地的。谢谢!
require({
/* Fixes an unexplained bug where module loads would timeout
* at compilation. */
waitSeconds: 0,
paths: {
'angular': '../vendor/angular/angular',
'angular-animate': '../vendor/angular/angular-animate',
/* ... */
'jquery': '../vendor/jquery/jquery'
},
shim: {
'angular': {
deps: [ 'jquery' ],
exports: 'angular'
},
'angular-animate': ['angular'],
/* ... */
'jquery': {
exports: 'jQuery'
}
},
optimize: 'uglify2',
uglify2: {
warnings: false,
/* Mangling defeats Angular injection by function argument names. */
mangle: false
}
})
define(['jquery', 'angular'], function($, angular) {
/* Angular bootstrap. */
})