当我从服务器的根目录加载应用程序时,该应用程序将运行。由于我们的应用程序使用了漂亮的网址,因此在实践中这是不可能的。例如,http://www.website.com/modules/worker/person/1/1/1使用先前的URL加载页面会导致system.js在/modules/worker/person/1/1文件夹中查找,而不是基于“ /”的文件夹。

解决方案是设置baseURL:"/",以便基于根目录加载模块。

THIS解决方案的问题在于,节点模块未正确加载,system.js不在根目录中查找,而没有在node_modules目录中查找。 system.js在/angular2/http.js中查找,而不是在/node_modules/angular2/http.js中查找

当我从“节点”模块编译切换到“经典”时,结果是相同的。

对如何进行有任何想法吗?

最佳答案

这是我使用System.config对象中的paths属性解决此问题的方法:

    System.config({
        defaultJSExtensions: true,
        baseURL: "/",
        paths: {
            'modules/worker/*': '/modules/worker/*',
            'angular2/*': '/node_modules/angular2/*',
            'rxjs/*': '/node_modules/rxjs/*',
        },
        packages: {
            modules : {
                worker: {
                    format: 'register',
                    defaultExtension: 'js'
                }
            }
        }
    });
    System.import('modules/worker/main')
            .then(null, console.error.bind(console));


对于在main.js(所有外部库)外部加载的每个资产,我必须在paths config属性中直接指向它们。根据您发布的Typescript类的依赖关系,此列表可能会有所不同。

09-29 22:59