This is in addition to registering for extensions. Note that only the new SourceProcessor APIs allow this, not registerSourceHandler. The filename in question is the basename of the file. The file can be found in any directory in any package. If you want to be more picky, you can just ignore other ones in your processFilesForTarget. This introduces the SourceProcessorSet abstraction, which simplifies a lot of repeated code around matching filenames with processors and avoiding duplicates. Missing tests. See also #3985.
coffeescript
CoffeeScript is a little language that compiles into JavaScript. It provides a simple syntax without lots of braces and parentheses. The code compiles one-to-one into the equivalent JS, and there is no interpretation at runtime.
CoffeeScript is supported on both the client and the server. Files
ending with .coffee, .litcoffee, or .coffee.md are automatically
compiled to JavaScript.
Namespacing and CoffeeScript
Here's how CoffeeScript works with Meteor's namespacing.
-
Per the usual CoffeeScript convention, CoffeeScript variables are file-scoped by default (visible only in the
.coffeefile where they are defined.) -
When writing a package, CoffeeScript-defined variables can be exported like any other variable (see Writing Packages). Exporting a variable pulls it up to package scope, meaning that it will be visible to all of the code in your app or package (both
.jsand.coffeefiles). -
Package-scope variables declared in
.jsfiles are visible in any.coffeefiles in the same app or project. -
There is no way to make a package-scope variable from a
.coffeefile other than exporting it. We couldn't figure out a way to make this fit naturally inside the CoffeeScript language. If you want to use package-scope variables with CoffeeScript, one way is to make a short.jsfile that declares all of your package-scope variables. They can then be read, mutated, and extended in.coffeefiles. -
If you want to share variables between
.coffeefiles in the same package, and don't want to separately declare them in a.jsfile, we have an experimental feature that you may like. An object calledshareis visible in CoffeeScript code and is shared across all.coffeefiles in the same package. So, you can writeshare.foofor a value that is shared between all CoffeeScript code in a package, but doesn't escape that package.
Heavy CoffeeScript users, please let us know how this arrangement
works for you, whether share is helpful for you, and anything else
you'd like to see changed.