Angular 4 Webpack 2 & AOT: "a" 标签意外关闭

4

当我进行构建时,出现了奇怪的错误,观看或运行服务器时没有任何提示,只有在构建时才会出现此错误:

意外关闭标记"a"。这可能是因为该标记已被另一个标记关闭。更多信息请参见 https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags ("ref=/user><img class="d-inline-block align-top" [src]="staticUrl + 'v4/img/intouch-logo-name.png'"/>[ERROR ->]</a> <search class="mr-auto col-sm-7 col-md-6 col-lg-5 col-xl-5 p-0"></search> <div id=settings> <div"): ng:///Users/header.html@0:192

以下是我的html代码:

<nav class="navbar d-flex flex-row navbar-light bg-faded fixed-top">
    <a class="navbar-brand" href="/user"><img class="d-inline-block align-top" [src]="staticUrl + 'v4/img/intouch-logo-name.png'" /></a>

    <search class="mr-auto col-sm-7 col-md-6 col-lg-5 col-xl-5 p-0"></search>

    <div id="settings">
        <div class="dropdown clearfix">
            <div class="userProfile dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                <div class="userDetail">
                    <label>
                        {{loggedUser.icontact.name.given + ((loggedUser.icontact.name.family) ? ' '+loggedUser.icontact.name.family : '')}}
                    </label>
                    <small>
                        {{loggedUser.icontact.user_iid}}
                    </small>
                </div>
                <img class="profilePic rounded-circle" [src]="(loggedUser.icontact.photo) ? loggedUser.icontact.photo.url : staticUrl + 'images/in_img_default_profile_100px.png'" />
            </div>
            <div class="dropdown-menu" aria-labelledby="settings">
                <a class="dropdown-item" [href]="'/' + loggedUser.icontact.user_iid" target="_blank">View profile</a>
                <a class="dropdown-item" href="/user/cards/" target="_blank">
                    Edit Profile
                </a>
                <div class="dropdown-divider"
                    *ngIf="accountInfo.userStatus.currentUserType == accountInfo.userStatus.groupType"></div>
                <a class="dropdown-item" href="/user/notices/" target="_blank"
                    *ngIf="accountInfo.userStatus.currentUserType == accountInfo.userStatus.groupType">Notices</a>
                <div class="dropdown-divider"></div>
                <a class="dropdown-item upgrade-link upgrade-account" href="/user/upgrade/" target="_blank" 
                    *ngIf="accountInfo.userStatus.currentPlan == '001'">Upgrade</a>
                <a class="dropdown-item" href="mailto:support@intouchid.net?Subject=Feedback%20on%20the%20new%20interface">Feedback</a>
                <a class="dropdown-item" href="/user/import/" target="_blank">Import data</a>
                <div class="dropdown-divider"></div>
                <a class="dropdown-item" href="/user/">Switch to old view</a>
                <div class="dropdown-divider"></div>
                <a class="dropdown-item" href="/logout/" 
                    (click)="utilsService.sendEvent('spreadsheet_view', 'logout_clicked', 'clicked on logout')">Logout</a>
            </div>
        </div>
    </div>
</nav>

以下是我使用的脚本来创建构建:npm run cleanup && npm run ngc && webpack --config config/webpack.prod.js -p,我的Webpack配置如下:

plugins: [
    new AotPlugin({
      tsConfigPath: './tsconfig.json',
      entryModule: helpers.root('src/app/app.module#AppModule')
    }),
    new webpack.LoaderOptionsPlugin({
      debug: true,  // config.debug has to be passed this way now too!
      htmlLoader: {
        minimize: false
      }
    }),
    new webpack.NoErrorsPlugin(),
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.UglifyJsPlugin({ // https://github.com/angular/angular/issues/10618
      mangle: {
        keep_fnames: true
      }
    }),
    new ExtractTextPlugin('[name].[hash].css'),
    new webpack.DefinePlugin({
      'process.env': {
        'ENV': JSON.stringify(ENV)
      }
    }),
    new CompressionPlugin()
  ]

你的错误信息显示你的第一个<a>标签中的href属性没有任何引号:ref=/user>。请检查引号是否正确 - 可以尝试删除href属性,看看是否有所改变。 - aaron-bond
我也遇到了同样的错误。你和我都在锚标签内部有图像。 - crh225
1
当我尝试使用Webpack进行生产打包时,出现了与开发模式下不同的错误。 - Kimmiekim
我在哪里可以找到一个解决这个问题并完整描述错误的帖子? - Egor Sazanovich
请访问:意外的闭合标签错误 - Iman Bahrampour
显示剩余3条评论
3个回答

5

在我的情况下,错误是由于HTML的最小化导致的。关闭它可以解决问题。要正确关闭,请查看此处的文档:https://webpack.js.org/loaders/html-loader

module: {
  rules: [{
    test: /\.html$/,
    use: [ {
      loader: 'html-loader',
      options: {
        minimize: false
      }
    }],
  }]
}

2

0

我猜测可能是由于插值后的引号或不可打印字符导致的问题。

请检查以下这些行:

<a class="dropdown-item" href="/user/notices/" target="_blank" *ngIf="accountInfo.userStatus.currentUserType == accountInfo.userStatus.groupType">Notices</a>
   <div class="dropdown-divider"></div>

并且

<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/logout/" (click)="utilsService.sendEvent('spreadsheet_view', 'logout_clicked', 'clicked on logout')">Logout</a>

我找不到引号的问题,因为在整个项目中我都遵循相同的做法,但只有这里出现错误。 - Dheeraj Agrawal
尝试在上一行的target="_blank"*ngIf=之间删除一些空格和换行符。我在http://jona.ca/blog/unclosed-tag-finder上测试了只有一个空格的情况,对我有效。然后你将在`<a class="dropdown-item" href="/logout/" (click)="utilsService.sendEvent(这一行的(click)`之前遇到相同的问题。 - Karbos 538
我编辑了我的回答,所以你应该把我的代码行粘贴到你的代码中进行测试。 - Karbos 538

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接