webpack html-loaders 小写 angular 2 内置指令

Posted

技术标签:

【中文标题】webpack html-loaders 小写 angular 2 内置指令【英文标题】:webpack html-loaders lowercase angular 2 built-in directives 【发布时间】:2017-03-30 07:11:05 【问题描述】:

我正在使用 html-loader 来加载我的 html 模板和 file-loader 来加载我在模板中的图像。这在 dev 中运行得很好,但是当我运行 build:prod 并运行输出时,我得到一个模板解析错误。

似乎所有 angular2 内置指令(例如,*ngFor、*ngIf)都转换为全小写(例如,*ngfor、*ngif),这会导致错误。

我尝试创建一个单独的项目,这一次,没有使用 Angular 2 中的任何内置指令,一切正常。

还有其他我可以使用的加载器吗?如何正确加载这些模板以及这些模板使用的图像?

这是我的 webpack.config

var webpack = require('webpack');
var HtmlWebPackPlugin = require('html-webpack-plugin');
var path = require('path');

module.exports = 
    entry:'./src/main.ts',

    output:
        path:'./dist',
        filename:'app.bundle.js'
    ,
    module:
        loaders:[test:/\.ts$/, loader:'ts-loader',
         test: /\.css$/, loaders: ['to-string-loader', 'css-loader'] ,
       test: /\.html$/, loader: 'html-loader' ,
      test: /\.(jpe?g|png|gif|svg)$/i, loader: "file-loader",
      // test: /\.html$/, loader: 'raw-loader' ,
      // test: require.resolve('jquery'), loader: 'expose?jQuery!expose?$' 
      ]

    /*   loaders: [
      // .ts files for TypeScript
       test: /\.ts$/, loaders: ['awesome-typescript-loader', 'angular2-template-loader'] ,
       test: /\.css$/, loaders: ['to-string-loader', 'css-loader'] ,
       test: /\.html$/, loader: 'raw-loader' 
    ]*/
    ,
    resolve:
        root: [ path.join(__dirname, 'src') ], //add this for dev server
        extensions:['','.js','.ts']
    ,
    plugins:[

        //inject all the files above into this file
        new HtmlWebPackPlugin(
            template: './src/index.html'
        ),
        new webpack.ProvidePlugin(
            jQuery: 'jquery',
                $: 'jquery',
                jquery: 'jquery'
        )

    ]



下面是我得到的解析错误。

错误:模板解析错误:无法绑定到“routerlink”,因为它 不是“a”的已知属性。 ("r>菜单][routerlink]=r.routerLink [routerlinkactive]="['active']">r.text "): t@0:359 不能绑定到 'routerlinkactive' 因为它不是 'a' 的已知属性。 (""item ui red" *ngfor="let r of routes"> ][routerlinkactive]="['active']">r.text Menu ]*ngfor="let r of routes"> 主菜单 [ERROR ->] ]*ngif=bolWidthLess1000>

[错误->] ][routerlink]=r.routerLink> ][routerlink]=r.routerLink [routerlinkactive]="['active']">r.text ][routerlinkactive]="['active']">r.text "): t@0:674 无法绑定 'ngforOf' 因为它不是 'a' 的已知属性。 ("/div>

]*ngfor="let r of routes" class="item mainmenu" [routerlink]=r.routerLink> "): t@0:540 属性绑定 ngforOf 未被任何指令使用 在嵌入式模板上。确保属性名称是拼写的 正确,所有指令都列在“指令”部分。 ("> [错误 ->] r.text ]*ngif=!bolWidthLess1000> "): t@0:512 属性绑定 ngif 嵌入式模板上的任何指令均未使用。确保 属性名称拼写正确,所有指令都列在 “指令”部分。 ("routerlink]=r.routerLink [routerlinkactive]="['active']">r.text [错误->]

【问题讨论】:

【参考方案1】:

在加载器查询中将最小化参数设置为 false,如下所示。

test: /\.html$/, loader: 'html?minimize=false'

或者

您可以将html-loader 升级到0.4.3 并使用以下配置。

test: /\.html$/, loader: 'html?minimize=true&caseSensitive: true

【讨论】:

只有 4.3 有 caseSensitive 选项?我使用的是 4.4,但它似乎不起作用,所以只做了最小化=false。 我花了一天中最好的时间来追踪这个问题,所以感谢你们的发帖! 检查这个***.com/a/47615772/9268047,它对我有用

以上是关于webpack html-loaders 小写 angular 2 内置指令的主要内容,如果未能解决你的问题,请参考以下文章

如何在 html-loader 中包含带有 webpack(版本 2)的 html 部分?

如何在 Jest 测试中使用我的 webpack 的 html-loader 导入?

[js高手之路]深入浅出webpack教程系列8-(postcss-loader,autoprefixer,html-loader,less-loader,ejs-loader)用法

webpack 文件加载器重复文件

Webpack:从 html 模板加载图像

Webpack 文件加载器输出 [object Module]