Coffeeify 只会解析入口文件

Coffeeify won't parse more than the entry file

我是 Browserify 的新手。我尝试使用 Watchify(出于性能原因)和 Coffeeify 将它集成到 gulp.js 中。我至少尝试了五种或多或少的不同方法,我在 Google 中找到了它们,其中最后一种是 gulp 文档中的 an official recipe

现在的问题是转换部分。我想使用 Coffeeify 来解析我的大部分用 CoffeeScript 编写的代码。

Coffeeify 成功解析了我的入口文件 app.coffee 但是当我从那里需要一个 ./foo.coffee 时,该文件似乎没有被转换,这自然会导致 Browserify 出现关于意外标记等的解析错误.

有人知道如何解决这个问题吗?

这是我的 gulp 文件的相关部分,与上面的 link 大部分相同,只是添加了转换。

var gulp = require( 'gulp' );
var gutil = require( 'gulp-util' );

var browserify = require( 'browserify' );
var watchify = require( 'watchify' );
var coffeeify = require( 'coffeeify' );
var source = require( 'vinyl-source-stream' );


var b = watchify( browserify({
    entries: [ './coffee/app.coffee' ],
    extensions: [ '.coffee' ],
    debug: true,
    cache: false,
    packageCache: false
}) );
b.transform( coffeeify ); // as described in the gulp docs

gulp.task( 'bundle', bundle );
b.on( 'update', bundle );
b.on( 'log', gutil.log );

function bundle() {
    return b.bundle()
        .on( 'error', gutil.log.bind( gutil, 'Browserify Error' ) )
        .pipe( source( 'bundle.js' ) )
        // I actually tried to pipe in coffeeify here (gulp-coffeeify as well), didn't help
        .pipe( gulp.dest( './js' ) );
};

好吧,这完全是我的错。我为此 post 抽象了我的代码,所以这里没有反映实际问题: app.coffee 而不是 实际上直接需要 ./foo.coffee 但需要 node_modules 目录中的 foo/foo,只是为了让事情更简单。 这正是问题所在:转换将不适用于所需的 。这是intended behavior

似乎有两种解决方法:

解决方案 1:名为 global-transform 的 browserify 选项。 在 API 中,它的用法类似于 b.transform( coffeeify, { global: true } )。这会将 coffeeify 转换应用于每个必需的模块。

解决方案 2:按包定义转换。这意味着:向每个模块的 package.json:

添加类似的内容
{
    "browserify": {
        "transform": ["coffeeify"]
    }
}

我决定使用第一个,因为我的 "packages" 实际上甚至没有 package.json 文件,它们只是在 node_modules 目录中,可以通过以下方式轻松访问浏览器化。