我正在做一些教程,我在CoffeeScript中编写所有内容.然后我必须编译到JS然后在node.js中执行.有没有办法直接做到这一点?
给定一个Backbone模型的实例,我怎么知道这个实例的"类"(可以这么说)?
例如:
class Car extends Backbone.Model
mycar = new Car()
Run Code Online (Sandbox Code Playgroud)
而我需要的是:
mycar.modelName # => 'Car'
Run Code Online (Sandbox Code Playgroud) 我使用以下命令安装平均堆栈并创建应用程序:
> sudo npm install -g meanio@latest // Get the mean cmdline
> mean init myApp // create your first app
> cd myApp && npm install // Install dependencies
> grunt // Launch mean
Run Code Online (Sandbox Code Playgroud)
但是当我到达最后的grunt命令时,我得到错误:
module.js:333
throw err;
^ Error: Cannot find module 'coffee-script'
at Function.Module._resolveFilename (module.js:331:15)
at Function.Module._load (module.js:273:25)
at Module.require (module.js:357:17)
at require (module.js:373:17)
at Object.<anonymous> (/home/eddie/ResFour/node_modules/grunt/lib/grunt.js:16:1)
我在stackoverflow上尝试了各种解决方案但无济于事:
我也清除了npm缓存并重新安装了几次.
是否可以在vim/MacVim中为CoffeeScript生成ctags文件?
在github上查看代码时,我发现了以下内容:
(function() {
}).call(this);
Run Code Online (Sandbox Code Playgroud)
这显然是一个自我调用的匿名函数.但为什么这样写呢?我习惯于看到规范的变体(function() {})().
使用.call(this)自动调用匿名函数有什么特别的优势吗?
编辑:看起来某些commonjs环境this在模块的顶层设置为非全局值.哪些,以及它们this可能想要保留的内容是什么?
当我第一次玩CoffeeScript时,我遇到了一个问题.为了调试我的问题,我尝试用咖啡脚本站点中的一个示例代码替换我的整个文件:
kids =
brother:
name: "Max"
age: 11
sister:
name: "Ida"
age: 9
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译该代码时,我得到:
Error: In coffee/main.coffee, Parse error on line 3: Unexpected 'INDENT'
at Object.parseError (/usr/lib/coffeescript/parser.js:501:11)
at Object.parse (/usr/lib/coffeescript/parser.js:573:32)
at Object.compile (/usr/lib/coffeescript/coffee-script.js:23:22)
at /usr/lib/coffeescript/command.js:99:27
at /usr/lib/coffeescript/command.js:72:28
at fs:84:13
at node.js:773:9
In coffee/main.coffee, Parse error on line 3: Unexpected 'INDENT'
Run Code Online (Sandbox Code Playgroud)
由于这是来自CoffeeScript网站的代码,我认为代码本身不是问题.但是,编译器似乎也正常工作; 如果我编译:
a = 2
Run Code Online (Sandbox Code Playgroud)
它生成一个文件:
(function(){
var a;
a = 2;
})();
Run Code Online (Sandbox Code Playgroud)
正如所料.所以换句话说,代码很好,编译器很好,但不知怎的,我得到了这个意外的'IDENT'错误......任何人都可以帮我理解发生了什么?
编辑:一年后,如果我要再次这样做,我会用curl.js代替Rails资产管道.
相关:在Rails 3应用程序中添加页面特定javascript的最佳方法?
我正在编写一个应用程序,并使用coffeescript生成所有的js.这就是相关问题不能满足我需要的原因.
我希望能够将coffeescript文件放在我的资产目录的子文件夹中,并且只能在一个页面上提供.coffee文件.该页面位于命名路由上
match 'myNotifications' => 'user#notifications'
最明显的事情是将.coffee文件放入assets\javascripts\user\index.js.coffee.但在阅读有关资产的文档后,我不清楚.
我读了这一行(来自http://guides.rubyonrails.org/asset_pipeline.html):
您应该将任何JavaScript或CSS唯一的控件放在各自的资产文件中,因为这些文件可以仅为这些控制器加载,例如<%= javascript_include_tag params [:controller]%>或<%= stylesheet_link_tag params [ :controller]%>.
好的很酷,所以我把页面特定的js放入assets\javascripts\user.js.coffee.然后我重新加载了我的主页,按Ctrl F5.user.js文件仍在主页上加载.经测试$ -> alert 'ready from users controller'; 加载主页时看到警报.
Rails是否有办法让每页的coffeescript文件只能与该页面一起提供?我读错了吗?在assets文件夹中是否有一个地方可以放入.coffee文件,它们不会被每个页面加载?
更新:看起来我可能有一个答案:
有几种方法可以解决这个问题.我们可以使用require_directory而不是require_tree,因为这只会加载当前目录中的文件而不是子目录中的文件.如果我们想要更多地控制包含的文件,我们可以单独地要求它们而不是包括整个目录.或者,我们可以将我们想要包含在所有页面上的JavaScript文件移动到公共子目录中.然后我们可以使用require_tree ./public来包含那些文件.
我会在上午给出一个镜头.
编译当前目录和所有子目录中所有.coffee文件的最简单方法是什么?
我们希望使用Coffeescript开发一个浏览器(仅限客户端)库,特别是除了纯函数之外,我们倾向于使用Coffeescript的"类"功能.库将相对较大,因此我们想要开始使用定义良好的模块模式,但不是我们想要每个coffeescript"类"的单个咖啡文件.我们不想动态编译咖啡文件,而是作为特定的构建步骤,并且不希望将所有输出的JS连接成一个文件.作为最终要求,我们将使用像Jasmine这样的东西进行测试.
有没有人知道以这种方式开发的一个好的示例库,使用Coffeescript与RequireJS,CurlJS,Browserify等等?我看过Github,有一些例子,但我看不出任何具体的需求.
我尝试了Coffee-Toaster,因为它似乎有一些承诺,可以很容易地定义依赖关系等,但它无法处理Windows路径(旧的\ vs /),所以放弃了,主要是因为它似乎是有点像"光明"方面 - 像RequireJS这样的东西似乎有更好的社区支持.
感谢您的任何帮助,您可以提供.我真的在寻找可行的源代码示例.
在vundle的主页上,它记录了它需要在.vimrc中关闭文件类型:
filetype off " required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么.由于我在为它们单独安装相关插件(vim-coffee-script和vim-less)后最近编辑.coffee和.less文件时遇到问题.关于vim-coffee-script的问题
coffeescript ×10
javascript ×3
node.js ×2
vim ×2
backbone.js ×1
commonjs ×1
ctags ×1
curljs ×1
less ×1
mean-stack ×1
module ×1
requirejs ×1