CoffeeScript 适合模块类型的书写吗?

CoffeeScript coolicer 发表于 4 年前最后回复来自 qq2850071112 2 年前

大概看了一下CoffeeScript编译结果都是这样:

(function(){
   ......
}).call(this);

这种闭包怎么向外提供接口,还是说它自己会处理?

(function(){
   ......
   window.moduleA = {
      some:"thing",
      some:Method
   }
}).call(this);

准备以后用模块框架来管理脚本(seajs之类),看到coffeescript,初初有点接受不了,现在想学一下,看看能不能适应。

共收到5条回复
guokai 4 年前 #1

如果用SeaJS的话,跟CoffeeScript也不冲突的,介绍下SeaJS的CoffeeScript插件:

首先,通过 seajs.config 指定 CoffeeScript 编译器的路径,然后在 preload 里激活 coffee 插件:

seajs.config({
    alias: {
        'coffee': 'coffee/1.1.2/coffee-script'
    },
    preload: ['plugin-coffee']
});

接下来,写好 coffee 脚本,使用 require 引入即可:

a.coffee:

define (require, exports) ->
    exports.foo = 'bar'
    return

main.js:

define(function(require) {
    var a = require('./a.coffee');
    console.log(a.foo);
});
island205 4 年前 #2

coffeescript编译生成的wrapper函数,可以通过配置编译参数(http://coffeescript.org/#usage)去掉。

但是实际上这wrapper函数正式模块化所需要,也如你所写的wrapper函数形成了一个封闭的作用域,只有通过window.xxx暴露出来该模块的接口,这样难道不好么? 当然暴露方式可以是window也可以是放在其他全局变量上。

如果你使用seajs管理模块,也不冲突,seajs的模块定义包裹在这个wrapper函数中,其实seajs相当于上面的暴露接口的载体。

coolicer 4 年前 #3

@guokai 没尝试过,原来还可以这样。

coolicer 4 年前 #4

@island205 不错。说点题外话,以前主要是都我一个人做前端,做一些企业站,用不上这些大型的工具。以后要多点尝试。

coolicer 4 年前 #5

我在想如果一个团队没有用Coffee,你自己用的话就是脱离了团队。别人看起来也吃力,虽然只是简化了一些语法。

登录后即可参与回复