如何在节点模块和浏览器环境之间共享类开发

时间:2014-04-25 18:55:09

标签: javascript node.js requirejs

我为node.js开发了这个代码:

user.js的:

var Underscore = require( '/usr/local/lib/node_modules/underscore' ),
    Backbone = require( '/usr/local/lib/node_modules/backbone' );

var User = Backbone.Model.extend( {

   // Handle calls to Mysql 

});
module.exports = User;

我已经为浏览器开发了这个代码:

user.js的:

define( function( require ) {
    var Backbone = require( "backbone" );
    var User = Backbone.Model.extend( {

    } );

    return lUser;
} );

是否可以为两种环境共享一个User实现文件?

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做。这是一个棘手的问题,有几种不同的尝试来解决它。我目前的建议是这种方法:

  • 将所有内容编码为node.js样式的CommonJS模块
    • 这意味着使用requiremodule.exports但不使用define,不使用包装函数等
  • 使用browserify打包一捆代码并将其发送到浏览器
  • 在可用时使用来自npm的软件包(主干,下划线等),否则使用browserify对非npm库的支持来根据需要填充内容(angularjs等)

在线使用可用的教程。需要花费一些精力来解决问题,但是一旦你了解了学习曲线,你就能够非常有效地共享和重用代码。

请注意上面的代码片段:在npm中可用时需要名称模块,或者在需要时需要相对路径,但绝不要像上面那样使用绝对路径。