使用Browserify和Gulp动态生成所需模块

时间:2015-04-27 22:30:28

标签: javascript dynamic gulp require browserify

有没有办法调用Browserify(通过Gulp),以便在{{1}使用给定名称的模块时包含一个不同的文件?

简单地说,我想要的最终结果是我的Browserify入口点,require

main.js

在我运行var myPlatformSpecificImplmentation = require('./platform'); // go to town 时运行./path/to/platform-a.jsgulp js:platform-a时使用./path/to/platform-b.js的内容。

如果我使用RequireJS,这就像修改gulp js:platform-b选项一样简单:

paths

如果我可以通过gulp的内置流机制以某种方式动态生成这些模块,那将是很棒的。在这种情况下,我可以说,将文件传输到paths: { platform: './path/to/platform-a' } 并进入Browserify。

由于

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用我的pathmodify插件,如下所示:

string strQuery = "UPDATE " + DB_TABLENAME + " SET " + "LLEGADA = CONVERT(smalldatetime, '@LLEGADA', 126), " + "SALIDA = CONVERT(smalldatetime, '@SALIDA', 126) " + "WHERE ID_RESERVA = @ID_RESERVA"; SqlCommand cmd = new SqlCommand(strQuery, con); // con = SqlConnection cmd.Parameters.Add("@ID_RESERVA", SqlDbType.Int); cmd.Parameters.Add("@LLEGADA", SqlDbType.SmallDateTime); cmd.Parameters.Add("@SALIDA", SqlDbType.SmallDateTime); cmd.Parameters["@ID_RESERVA"].Value = Convert.ToInt32(stringWithIdReserva); cmd.Parameters["@LLEGADA"].Value = stringWithLLegada.Replace(" ", "T"); //Real string value: "2015-03-30 00:00:00" cmd.Parameters["@SALIDA"].Value = stringWithSalida.InnerText.Replace(" ", "T"); //Real string value: "2015-04-01 00:00:00" try { cmd.ExecuteNonQuery(); } catch (SqlException ex) { Console.WriteLine(ex.Message); }

gulpfile.js

var pathmod = require('pathmodify'), paths = {a: '/path/to/platform-a.js', b: '/path/to/platform-b.js'}; function platform (version) { return function () { return browserify('./main') .plugin(pathmod(), {mods: [ pathmod.mod.id('app/platform', paths[version]) ]}) .bundle() .pipe(...); }; } gulp.task('js:platform-a', platform('a')); gulp.task('js:platform-b', platform('b'));

main.js

我已将此var myPlatformSpecificImplmentation = require('app/platform'); 字符串更改为require()进行说明,因为这样可以最简单地实现pathmodify,而不会与其他文件中的其他app/platform相对路径发生冲突。但是这个可以使用pathmodify实现而不会有碰撞的风险(通过测试父模块[在本例中为{./platform] pathname)。如果您保留main.js字符串对我很重要,我会说明这一点。

或者您可以使用转换。如果您不想自己动手,请查看benbria/browserify-transform-tools中的./platform

  

如果我能通过gulp的内置流机制以某种方式动态生成这些模块,那将是很棒的。在这种情况下,我可以将文件传输到gulp-template并传输到Browserify。

这不是不可能的,但这并不容易。要在不触摸磁盘的情况下执行此操作,您需要执行诸如创建/ makeRequireTransform()乙烯基文件之类的操作并通过任何gulp插件运行它,然后将其转换为流以提供给browserify。