编写一个在NodeJS和Requirejs中都能工作的模块 [英] Write a module that works both in nodejs and requirejs

查看:27
本文介绍了编写一个在NodeJS和Requirejs中都能工作的模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个小解析器,目前在Node app中工作,但我想知道是否有方法可以制作一个模块,既可以在NodeJS应用中工作,也可以在使用Requirejs的客户端应用中工作?

path/to/lib/index.js

function someRandom(strings) {
  // we are doing something here
  return strings
}

exports.someRandom = someRandom;

现在我在客户端收到这个

Uncaught ReferenceError: exports is not defined 

我知道我可以使用节点requirejs,然后将结构更改为使用define,但是有没有其他方法而不添加节点requirejs

这是我的js/main.js文件

require(["path/to/lib/index"], function(something) {
    // will do something here
});

推荐答案

我更喜欢的方式是用AMD语法编写我的所有模块(使用define),然后使用amd-loader将它们加载到Node中。请注意,此解决方案未使用RequireJS,尽管使用了AMD语法。

但是,有一种方法可以在不使用AMD语法的情况下实现这一点。您可以使用r.js包装Node模块。例如,如果您将您的节点模块树放在in中,您可以这样做:

$ r.js -convert in out
这将在out中创建一个文件树,这些文件与in中的文件相对应,但用define调用包装。然后,您可以使用RequireJS将它们加载到浏览器中。这是有局限性的。有些是显而易见的,比如不能使用依赖于Node运行时的Node模块(如fschild_process等)。有些更加微妙,比如您不能使用require(foo),其中foo是一个变量(RequireJS在那里只处理字符串文字)。有关详细信息,请参阅documentation

这篇关于编写一个在NodeJS和Requirejs中都能工作的模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆