получить дерево зависимостей coffee-script с помощью браузера

Я пытаюсь получить дерево зависимостей для проекта coffee-script, используя browserify.

Кажется, что проект поставляется с возможностью печати дерева зависимостей из командной строки с помощью browserify -t coffeeify --deps ./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)

В идеале я хотел бы автоматизировать создание дерева зависимостей с помощью API браузера, но неясно, как это сделать.

Казалось разумным начать работать в обратном направлении от module-deps, но не очевидно, что это было разработано пройтись по дереву зависимостей для проекта coffee-script. Однако я не отправлял связанный запрос на включение GitHub. В этом свете я надеялся внедрить браузер transform и прочитать зависимости для каждого файла после того, как браузер уже преобразовал его в javascript из coffee-script, однако module-deps, похоже, принимает только имена файлов, а не сам источник 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 вызовов.

Кто-нибудь выполнил печать дерева зависимостей coffee-script с помощью браузера? Кажется, это было бы очень полезно, и я был бы удивлен, если бы до этого еще никто не добрался.


person Brian M. Hunt    schedule 26.07.2013    source источник


Ответы (1)


Похоже, что есть ошибка в browserify, которая не позволяет вызову deps() получать преобразования , поэтому deps пытается разобрать сырой кофе вместо скомпилированного js.

Исправление для вашего случая - сделать что-то вроде:

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

т.е. передайте список преобразований deps() себе.

person Jason Walton    schedule 21.01.2014
comment
Один недостаток к вышесказанному; если вы хотите сделать бандл и депс, вы фактически создадите все дважды. Я только что сделал этот пакет для сбора отпечатков при сборке. - person Jason Walton; 22.01.2014