【问题标题】:Reference node_module after running browserify运行 browserify 后引用 node_module
【发布时间】:2017-02-28 11:01:27
【问题描述】:

我找到了一个我希望能够包含在我的 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
);

这里似乎需要一个 require,但这不是我运行 browserify 的全部原因吗?我在这里错过了什么?

【问题讨论】:

    标签: angularjs node.js browserify node-modules


    【解决方案1】:

    来自Browserify website:

    浏览器没有定义 require 方法,但 Node.js 有。和 Browserify 你可以编写使用 require 的代码,就像 你会在 Node 中使用它。

    Browserify 的重点是在浏览器中为您提供一个模块系统,并允许您访问require 文件。它非常有用,允许您轻松地包含 Node 模块并模块化您自己的应用程序。

    要使用您在 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'));
    

    然后将其注入到其他服务和控制器中,并随心所欲地使用它。

    【讨论】:

    • 谢谢你,但我还是有点困惑。我运行了browserify,但如果我在我的角度代码中的任何地方放置require,我会得到“require is not defined”。我认为运行 cmd 并包含文件就可以了,这样你就可以使用 require 了。这是生成文件的链接drive.google.com/open?id=0BxB-19VLAr8SdlhtbE1yV29ZYk0
    • 我不确定,但我怀疑你有问题like this。 Browserify 将为您构建一个捆绑文件,require 仅在此捆绑文件的范围内定义。您仍然可以在源代码中使用require,因为它将在您的捆绑软件运行时定义,但如果您在捆绑文件之外包含任何引用require 的内容,您将收到此未定义错误。发布您的index.html 文件将比生成的文件更有帮助。
    • 我想通了,我必须浏览化调用该模块的 Angular 代码...不是我希望的那样。
    【解决方案2】:

    如果您想构建一个包含 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 选项。

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 2017-04-10
      • 2016-10-13
      相关资源
      最近更新 更多