Angular,没有浏览器?

时间:2015-08-24 00:12:20

标签: angularjs node.js

有时我想尝试(在本地Node脚本中)使用Angular的某些方面 - 例如服务,DI等 - 与浏览器或DOM无关的东西。 有办法吗?即加载Angular基础设施的一些基础部分?如果我只是在节点脚本中要求(" angular"),它会抱怨:

ReferenceError: window is not defined

这是有道理的,因为Angular适用于Browser-window。

但似乎Angular 的某些部分可以用于非Web应用程序 - 尽管这不是我提出这个问题的理由。我只是想提高我对Angular的理解,有时候想要做一点实验,同时尽可能地剥离/忽略。

1 个答案:

答案 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。