有时我想尝试(在本地Node脚本中)使用Angular的某些方面 - 例如服务,DI等 - 与浏览器或DOM无关的东西。 有办法吗?即加载Angular基础设施的一些基础部分?如果我只是在节点脚本中要求(" angular"),它会抱怨:
ReferenceError: window is not defined
这是有道理的,因为Angular适用于Browser-window。
但似乎Angular 的某些部分可以用于非Web应用程序 - 尽管这不是我提出这个问题的理由。我只是想提高我对Angular的理解,有时候想要做一点实验,同时尽可能地剥离/忽略。
答案 0 :(得分:3)
最好在浏览器中尝试Angular,因为window
和其他API的Angular依赖。
但是,如果您已经开始使用Angular with node,那么您可以查看vm
模块,它基本上允许您eval
使用特定的替代对象进行编码排序代理全局对象。 e.g:
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);
至少可以让你在没有抱怨的情况下加载Angular。毫无疑问,您会遇到更多错误,并且必须自己填充缺少的浏览器API。
您也可以查看PhantomJS以获得更强大的测试环境,尽管这不再是Node。