【发布时间】:2019-04-19 03:05:29
【问题描述】:
我在Angular 2 项目中使用了这个es6-module-loader,它非常适合在网络浏览器中实时加载TypeScript 模块。现在,我正在将此项目升级到Angular 6,但是这里加载模块的imports 的依赖关系不满足。例如:
declare var SystemLoader:any;
export class DemoClass {
constructor() {
var source = "export class Foo { " +
"constructor() { console.log('Created the ES6 class foo!'); } " +
"execMethod() { console.log('Executed method!') }" +
"}";
SystemLoader.module(source, {name: _name}).then(function (module: any) {
module.Foo.prototype.execMethod();
}
}
}
之前的代码在Angular 6 中工作。它将加载模块Foo 并在Console 中打印这些行。但是,如果我让模块有点复杂并像这样添加一些import:
declare var SystemLoader:any;
export class DemoClass {
constructor() {
var source = "import {Component} from \"@angular/core\"; " +
"export class Foo { " +
"constructor() { console.log('Created the ES6 class foo!'); } " +
"execMethod() { console.log('Executed method!') }" +
"}";
SystemLoader.module(source, {name: _name}).then(function (module: any) {
module.Foo.prototype.execMethod();
}
}
}
然后它将无法正常工作并与error 404 loading @angular/core 抱怨。因此,在Angular 2 中,这没有问题,因为由Angular 加载的项目所需的所有node_modules 原样,但在Angular 6 中,似乎所有这些依赖项都由Webpack 展示并吐出所有在一个大胖子JavaScript 文件中。那么,我怎样才能绕过这个Webpack 简化,以便可以加载动态模块?
编辑:
或者至少使用上面公开的相同过程(加载源代码、编译 [transpile] 并在客户端机器中渲染)从 es6-module-loader(已弃用)迁移到 es-module-loader 的示例。
【问题讨论】:
-
你在使用 Angular CLI 吗?另外,您是否尝试过删除所有节点模块并重新安装? (只需重新运行 npm install)
-
@AljoshaNovakovic 这与开发环境中的错误安装无关,只有在文件加载到服务器后,问题才会在运行时发生。由于
Webpack的操作,所有文件都被简化并使用其他名称。 -
@JoeAlmore 你确定问题不是由
source字符串引起的吗?应该是 "import { Component } from '@angular/core';" + -
@DipenShah 抱歉,字符串没有转义,只是修正了错字。
-
在你的项目目录中运行 npm install
标签: javascript angular es6-module-loader