我是Browserify的初学者。我试图将它与Watchify(出于性能原因)和Coffeeify集成到gulp.js中。我尝试了至少五种不同的方法,我在Google中找到了这些方法,其中最后一种方法是gulp docs中的an official recipe。
现在的问题是转型部分。我想使用Coffeeify来解析我的代码,这些代码主要是用CoffeeScript编写的。
Coffeeify成功解析了我的条目文件app.coffee
,但是当我从那里需要./foo.coffee
时,该文件似乎不会被转换,这自然会导致Browserify发生关于意外令牌等的解析错误。< / p>
任何人都知道如何解决这个问题?
这里是我的gulpfile的相关部分,大部分与上面的链接相同,只是添加了转换。
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' ) );
};
答案 0 :(得分:0)
好的,这完全是我的坏事。我为这篇文章抽象了我的代码太过分了,所以实际的问题没有反映在这里:
app.coffee
不直接实际需要./foo.coffee
,但需要来自foo/foo
目录的node_modules
,以简化操作。
这正是问题:转换不适用于所需的包。这是intended behavior。
似乎有两种解决方法:
解决方案1:名为global-transform
的浏览器选项。
在API中,它像b.transform( coffeeify, { global: true } )
一样使用。这将把coffeeify转换应用于每个必需的模块。
解决方案2:转换的分组定义。这意味着:在每个模块的package.json中添加这样的东西:
{
"browserify": {
"transform": ["coffeeify"]
}
}
我决定使用第一个,因为我的“包”实际上甚至没有package.json文件,它们只是在node_modules目录中,可以通过browserify轻松访问。