如何通过保持“templateurl”不变来编译 Angular 2 Webpack

2024-01-11

Webpack 通过在中生成“js”来编译“typescript”文件dist文件夹。 我发现 webpack 正在将所有 'templateurl' 更改为 'template',如下所示:

我的打字稿组件:

@Component({
selector: 'app',
encapsulation: ViewEncapsulation.None,
templateUrl: 'app.html', // <----------------------
directives: [HeaderComponent, SideBar],
})

这里是自动生成的编译后的 JS 组件

App = __decorate([
        core_1.Component({
            selector: 'app',
            encapsulation: core_1.ViewEncapsulation.None,
            template: __webpack_require__(718),// <----------
            directives: [header_component_1.HeaderComponent, sidebar_component_1.SideBar],
        }), 
        __metadata('design:paramtypes', [(typeof (_a = typeof app_service_1.AppState !== 'undefined' && app_service_1.AppState) === 'function' && _a) || Object])
    ], App);

我想做的只是在生成的文件中继续使用“templateUrl”。

我正在使用 asp.net mvc,我有很多 CSHTML 文件,我想继续使用它。我想改变 webpack 编译“ts”的方式,并忽略“获取该 html 的内容”的想法。所以我期待:

App = __decorate([
        core_1.Component({
            selector: 'app',
            encapsulation: core_1.ViewEncapsulation.None,
            templateUrl: 'app.html', // <----------------------
            directives: [header_component_1.HeaderComponent, sidebar_component_1.SideBar],
        }), 
        __metadata('design:paramtypes', [(typeof (_a = typeof app_service_1.AppState !== 'undefined' && app_service_1.AppState) === 'function' && _a) || Object])
    ], App);

我尝试像这样手动更改自动生成的文件。它有效。 我想保留 templateUrl。


Webpack 并没有这样做。 如果完成了这样的事情,您可能有一个加载器可以做到这一点。

您可能正在使用带有预配置 webpack 配置的入门套件。 我最好的选择是你正在使用angular2-webpack-启动器 https://github.com/AngularClass/angular2-webpack-starter.

In angular2-webpack-启动器有一个插件叫Angular2 模板加载器用于转换Component.templateUrl to Component.template通过将文字字符串(即:html 路径)更改为 require 语句。

此过程内联所有 html 和style's,所以它不仅适用于 html 模板,也适用于 styleUrls。

要删除此功能,请在 webpack 配置文件中更改以下内容:

  module: {
    loaders: [
      {
        test: /\.ts$/,
        loaders: ['awesome-typescript-loader', 'angular2-template-loader'],
        exclude: [/\.(spec|e2e)\.ts$/]
      }
    ]
  }

To this:

  module: {
    loaders: [
      {
        test: /\.ts$/,
        loaders: ['awesome-typescript-loader'],
        exclude: [/\.(spec|e2e)\.ts$/]
      }
    ]
  }

也就是说,删除执行内联的加载器(angular2-template-loader)

如果你想更深入,这里是代码的一部分Angular2 模板加载器:

  var newSource = source.replace(templateUrlRegex, function (match, url) {
                 // replace: templateUrl: './path/to/template.html'
                 // with: template: require('./path/to/template.html')
                 return "template:" + replaceStringsWithRequires(url);
               })
               .replace(stylesRegex, function (match, urls) {
                 // replace: stylesUrl: ['./foo.css', "./baz.css", "./index.component.css"]
                 // with: styles: [require('./foo.css'), require("./baz.css"), require("./index.component.css")]
                 return "styles:" + replaceStringsWithRequires(urls);
               });

  // Support for tests
  if (this.callback) {
    this.callback(null, newSource, sourcemap)
  } else {
    return newSource;
  }
};

您可以在评论中看到这正是您遇到的问题。 您还可以查看源代码 https://github.com/TheLarkInn/angular2-template-loader/blob/master/index.js#L19

应该注意的是,选择退出内联将导致性能下降。您的应用程序将必须执行更多的 http 请求,并且您的 HTML 标记(模板)将保持其原始形式。换句话说,你写的HTML代码不会得到webpack提供的优化。我不建议选择退出此加载程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过保持“templateurl”不变来编译 Angular 2 Webpack 的相关文章

随机推荐

  • 如何更改 Rails 中的“3 个错误禁止保存此 foobar”验证消息?

    在我的 Rails 应用程序中 我在活动记录对象中使用验证助手 它们非常棒 当出现问题时 我会在网页上看到标准的 3 个错误禁止保存此 foobar 以及各个问题 有什么方法可以用我自己的消息覆盖此默认消息吗 The error messa
  • Python lxml通过id标签查找元素

    我正在开发一个 python 程序来保存储藏室的库存 在 XML 文档中 将保留碳粉量 我希望我的 python 程序能够添加 删除和显示不同打印机和不同颜色的碳粉量 我的 XML 看起来像这样
  • 连接数组切片

    我有两个 非常大的 数组foo and bar属于同一类型 为了能够编写一些漂亮的代码 我想获得一个只读切片 result 两个数组的串联 此操作必须在 O 1 时间和空间内运行 数组访问result也必须在 O 1 内 更一般地说 如果r
  • 无法安装设计

    尝试安装 Devise 时 我收到以下消息 无法找到生成器 devise 安装 leigh leigh VirtualBox Projects dev01 bundle install Using rake 10 3 2 Using i18
  • 如何在django中将数据发送到base.html?

    我正在寻找一种方法来抽象 django 中的导航栏并将其包含在 base html 中 直接或通过模板包含 我完全迷失的部分是 如何将数据附加到上下文 以便导航栏可以从数据库获取其内容 我想查询views py 中的数据并使其可用于模板 以
  • 添加具有颜色属性的边/节点

    我使用的是networkxPython 的包 文档说我们可以做H add edge 1 2 color blue 但输出显示默认颜色 黑色 的边缘 当我做H add node 12 color green 我得到一个具有相同默认红色的新节点
  • Gradle 中的冒号运算符是什么?

    你总是看到这样的代码 project bluewhale hello 这似乎不是 Groovy 语法 它是什么 冒号不是运算符 您可以看到它在字符串内使用 它是 Gradle 用于描述子项目路径的分隔符 例如 evaluationDepen
  • Jenkins Groovy 脚本发现 null testResultAction 成功运行

    我们有一个用于詹金斯测试套件的电子邮件报告编写者 它使用 Groovy 脚本来查找正确的报告 然后制作一个 HTML 报告 详细说明测试状态 上次运行时间 链接等 hudson model Hudson instance getItems
  • 桌面浏览器是否支持 Facebook Messenger 弹出网页视图?

    我可以在 IOS Messenger 应用程序上使用 Messenger webviews 配置为文档中描述 https developers facebook com docs messenger platform send api re
  • if constexpr 未在模板化 lambda 中丢弃的错误分支

    我在模板 lambda 中遇到 if constexpr 问题 为了便于讨论 让我们忽略我是如何到达那里的 但我有一个 struct foo 它以某种方式定义 结果如下 template
  • Django:将数据从一个数据库复制到另一个数据库

    我有两个 sqlite db 文件 我想将数据库文件表中一列的内容复制到另一列 例如 我在名为 new db 的数据库文件中有模型信息 class Information models Model info id models AutoFi
  • 显示 Volley 文件下载的进度值

    我需要以百分比显示文件下载进度 目前我正在使用Volley图书馆 我用InputStreamVolleyRequest发出下载请求的类BufferedOutputStream读 写文件 如何以最有效的方式显示进度更新 我正在将进度条与 Ht
  • 为什么此代码不能正确增加计数器?

    在下面的代码中 为什么它不每次将整数加一 例如 假设我有1 OF 5当我提交表格时 提交后应该是2 OF 5 但相反 它显示5 OF 5 即使我将最大值从 5 更改为 3 也会发生这种情况 它开始于1 OF 3并立即跳转到3 OF 3 这是
  • 使用UTF-8编码的VBA Excel宏写入文件[重复]

    这个问题在这里已经有答案了 我正在 Excel 中创建一个宏 用于处理电子表格并将内容 文本 写入文件 我需要将此文件编码为 UTF 8 我尝试使用 OpenTextFile TristateTrue 和 StrConv vbUnicode
  • 如何避免Angularjs中的大量依赖

    我有一个 Angular 应用程序 它运行良好 但随着我的应用程序变得越来越大 我担心必须在每个控制器中注入大量依赖项 例如 app controller viewapps scope Appfactory Menu timeout fil
  • 单独窗口中的 Android Studio 模拟器

    我的 Android Studio 遇到问题 这是我第一次安装Android Studio 问题是 当我安装任何设备时 它会在设备或模拟器周围出现灰色背景 我不知道它是否与最新的 Android Studio 版本有关 因为我已经更新了它
  • C++ 中的头文件和 Java 中的抽象类/接口实现都是相同的想法,这是否正确?

    我对 C 有点熟悉 我知道对于几乎每个头文件 我都必须创建源文件来配合它 现在我正在研究java接口和实现 它看起来是一样的 首先 您只需在一个类中命名变量和方法 然后在其他类中定义它们 C 和Java中的这些东西是不是基本相同或者相似 J
  • 本地站点的 HTML 图像

    我是 HTML 新手 有一个关于图像的简单问题 下面是我正在使用的一个简单的 html 文件 我想将图像放入其中 该图像存储在我网站的主目录中 该网站是本地的 在我的 MacBook 上 h1 My First Heading h1 p M
  • 使用字符串日期对列表进行排序 [Kotlin]

    我有数组列表typeBeanArrayList其中元素有点像日期 例如 30 03 2012 28 03 2013 31 03 2012 2 04 2012 我怎样才能排序降序 Code typeBeanArrayList database
  • 如何通过保持“templateurl”不变来编译 Angular 2 Webpack

    Webpack 通过在中生成 js 来编译 typescript 文件dist文件夹 我发现 webpack 正在将所有 templateurl 更改为 template 如下所示 我的打字稿组件 Component selector ap