运行browserify后引用node_module

时间:2016-10-19 01:32:56

标签: angularjs node.js browserify node-modules

我找到了一个我希望能够包含在我的Angular应用程序中的nodejs模块。我四处看看,看到我可以通过运行browserify来实现这一点。这样做之后,我在我的html中引用了新文件,但在此之后我不知道该怎么做。我需要在哪里引用它以获得角度范围?这是我希望能够访问的github仓库

https://github.com/whatadewitt/yfsapi

浏览node_modules文件夹中的文件后,我有一个大的js文件。 Node中的用法是

var YahooFantasy = require('yahoo-fantasy');
// you can get an application key/secret by creating a new application on Yahoo!
var yf = new YahooFantasy(
               Y!APPLICATION_KEY,
               Y!APPLICATION_SECRET
);

这似乎需要一个要求,但是我不是首先在浏览器中运行浏览器的全部原因吗?我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

来自Browserify website

  

浏览器没有定义require方法,但Node.js确实如此。同   Browserify你可以用相同的方式编写使用require的代码   你会在Node中使用它。

Browserify的目的是在浏览器中为您提供模块系统,并允许您使用require个文件。它非常有用,可以让您轻松地包含节点模块并模块化您自己的应用程序。

要使用您在Angular应用程序中引用的Node模块,您基本上可以完成演示在控制器或服务中显示的内容。就个人而言,我可能建议创建一个包装Node模块的服务,并公开与Yahoo Fantasy服务器交互的方法;我可能不会把它放在$scope,除非你出于某种原因绝对不得不这样做。

这里有一些伪代码:

var yf = require('yahoo-fantasy');

function YFantasyService (<dependencies>) {
  this.someMethod = function () {
    return yf.doStuff();
  }
}

YFantasyService.$inject = [<dependencies>];

module.exports = YFantasyService;

注册您的服务(这就是我的应用程序结构的方式......还有很多其他方法可以编写和注册服务,但您明白了这一点):

angular.module('YFantasyApp', [<dependencies>])
  .service('YFantasyService', require('./YFantasyService'));

然后将其注入其他服务和控制器,并随心所欲地做任何事情。

答案 1 :(得分:0)

如果您要构建包含yahoo-fantasy的捆绑包 - 以便您可以在对现有代码进行最少更改的情况下使用它 - 您可以使用Browserify API:

var browserify = require("browserify");

browserify()
    .require("yahoo-fantasy", { expose: "yahoo-fantasy" })
    .bundle()
    .pipe(process.stdout);

这将生成一个包含yahoo-fantasy模块及其所有依赖项的包,并将公开一个可以调用以访问所述模块的全局require函数:

<!doctype html>
<html>
<head>
    <title>so-40120643</title>
</head>
<body>
    <script src="./bundle.js"></script>
    <script>
        console.log(require("yahoo-fantasy"));
    </script>
</body>
</html>

如果您想为全局require功能使用其他名称,可以使用Browserify的externalRequireName选项。