使用browserify获取coffee-script依赖树

时间:2013-07-26 12:46:20

标签: coffeescript browserify

我正在尝试使用browserify获取咖啡脚本项目的依赖关系树。

项目似乎附带了使用browserify -t coffeeify --deps ./script.coffee从命令行打印依赖关系树的选项,

script.coffee

console.log 'hello'
require 'a.coffee'

爆炸出错(为简洁而编辑):

... Unexpected token ILLEGAL
    at parseDeps (/.../module-deps/index.js:172:45)
    at done (/.../browserify/node_modules/module-deps/index.js:152:13)
    at applyTransforms (/.../browserify/node_modules/module-deps/index.js:135:41)
    at /.../browserify/node_modules/module-deps/index.js:112:17
    at fs.js:266:14
    at Object.oncomplete (fs.js:107:15)

我希望通过使用browserify API自动创建依赖关系树,但是如何实现这一目标并不明显。

module-deps开始向后工作似乎是合理的,但是它的设计目的并不是为咖啡脚本项目提供依赖树。但是,我没有a related GitHub pull request。从这个角度来看,我希望注入一个browserify transform并在浏览器已经将它从咖啡脚本转换为javascript后读取每个文件的依赖关系,但是模块代表似乎只采用文件名而不是javascript源本身。如下所示:

require('browserify')
  .add('./script.coffee') 
  .transform(require('coffeeify')
  .transform((file) ->
    data = ''
    write = (buf) -> data += buf
    end = ->
      ## parse data for dependencies.
      console.log "File ", file, "dependencies", mdeps(data)
      @queue(data)
      @queue(null)
    return through(write, end)
  )

这不起作用,因为据我所知,mdeps函数不存在。我希望它会涉及使用其中一个解析器(esprima等)来查找require个调用。

有没有人使用browserify完成打印咖啡脚本依赖树?看起来它非常有用,如果还没有人知道它,我会感到惊讶。

1 个答案:

答案 0 :(得分:2)

似乎有一个bug in browserify会阻止deps()调用获取变换,因此deps正在尝试解析原始咖啡而不是已编译的js。

您的案例的修复方法是执行以下操作:

var coffeeify = require('coffeeify');
require('browserify')
  .add('./script.coffee') 
  .transform(coffeeify)
  .deps({transform: [coffeeify]});

即。将转换列表传递给deps()