在节点中使用require('angular')会导致Window未定义

all*_*ded 11 node.js express angularjs

所以我对节点完全不熟悉,但我想出了如何安装node_modules.我想弄清楚的是如何在我的代码中正确包含'Angular'.

所以从一个新的快递4旋转我做了:

npm install --save angular
Run Code Online (Sandbox Code Playgroud)

然后我进入routes/index.js并添加了require('angular'):

var express = require('express');
var router = express.Router();
require('angular');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

但是当我做节点启动时,我得到一个错误,说:

ReferenceError: window is not defined
    at Object.<anonymous> (/Users/al/Projects/node/podcastsearch/podcast/node_modules/angular/angular.js:26307:4)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/al/Projects/node/podcastsearch/podcast/node_modules/angular/index.js:1:63)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
Run Code Online (Sandbox Code Playgroud)

包含角度的正确方法是什么?

Anu*_*dav 10

Angular是客户端幻灯片脚本库.Node JS需要加载节点模块,而Angular不是Node模块.

在您的HTML页面中,您应该执行以下操作:

<html>
  <head>
    <title>My Angular App!</title>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.10/angular.min.js"></script>
    <script src="app.js"></script>
  </head>
  <body ng-app="flapperNews" ng-controller="MainCtrl">
    <div>
      {{test}}
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

更新:根据评论.角度模块 - https://www.npmjs.com/package/angular

获取角度js文件并将其保存在节点模块文件夹中.Angular仍然是客户端库,您需要在HTML中添加脚本标记以使用角度.您不应该在节点代码中要求它.请检查该链接中给出的样本.

另外,您可以考虑在客户端使用require js,head js,browserify等

  • @allencoded您可以在客户端脚本中使用`require()`,使用Browserify进行类似操作. (2认同)