Angular,没有浏览器?

有时候我想在Angular的某些方面(例如Services,DI等)尝试(在本地Node脚本中) – 与浏览器或DOM无关的东西。 有没有办法做到这一点? 即加载Angular基础设施的一些基础部分? 如果我只需要(“angular”)在一个节点脚本,它抱怨:

ReferenceError: window is not defined 

这是有道理的,因为Angular生活在浏览器窗口。

但是,似乎Angular的某些部分可以用于非web应用程序 – 虽然这不是我问这个问题的理由。 我只是试图提高我对Angular的理解,有时候想尽可能多地去掉/忽略一些小实验。

由于window和其他API依赖于Angular,因此最好在浏览器中尝试使用Angular。

但是,如果您已经使用Angular with node进行了设置,那么您可以查看vm模块,该模块实质上允许您使用特定的替代对象作为代理全局对象来eval代码。 例如:

 const vm = require('vm'); const fs = require('fs'); const test = fs.readFileSync('./test.js', 'utf-8'); const windowProxy = { document: { createElement: function() { return { setAttribute: function() {}, pathname: '' } }, querySelector: function() {}, addEventListener: function() {} }, location: { href: '' }, addEventListener: function() {} }; windowProxy.window = windowProxy; vm.createContext(windowProxy); vm.runInContext(test, windowProxy); 

至less会让你加载Angular而不抱怨。 毫无疑问,你会遇到更多的错误,并且必须自己填充缺less的浏览器API。

您也可以考虑PhantomJS以获得更强大的testing环境,尽pipe这不再是Node。