Angular2和Webpack引导

时间:2016-12-26 00:59:28

标签: angular typescript webpack

我最近开始学习Angular2,因为我已经知道了一些Webpack,我想一起使用它们。我在网上跟踪了一些指南和教程,想出了一个相当简单的应用程序,我现在遇到的唯一问题是我实际上无法运行它。我认为我已经做好了一切,但尽管应用程序应该挂载的组件标签仍然是空的。我的文件如下:

main.ts

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';


platformBrowserDynamic().bootstrapModule(AppModule);

webpack.config.js

const webpack = require('webpack');

module.exports = {

    entry: './public/main.ts',
    output: {
        path: './dist',
        filename: 'app.bundle.js'
    },
    module: {
        loaders: [
            {
                test: /\.ts$/,
                loader: 'awesome-typescript-loader!angular2-template-loader'
            },
            {
                test: /\.html$/,
                loader: 'html'
            }
        ]
    },
    resolve: {
        extensions: ['', '.ts', '.js']
    },
}

tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "experimentalDecorators": true,
        "module": "commonjs",
        "typeRoots": [
            "./node_modules/typings/"
        ],
        "types": [
            "core-js"
        ]
    },
    "exclude": [
        "node_modules",
        "typings/main",
        "typings/main.d.ts"
    ]
}

的index.html

<!DOCTYPE html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Songs App</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        <script src="../node_modules/zone.js/zone.js"></script>
        <script src="../node_modules/reflect-metadata/Reflect.js"></script>
        <script src="./../dist/app.bundle.js"></script>
        <song-app></song-app>
    </body>
</html>

App组件元素为<song-app>。任何帮助将不胜感激。

编辑1:

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './components/App.component';
import { AppRoutingModule, routingComponents } from './app.routing';

@NgModule({
    imports: [
        BrowserModule,
        AppRoutingModule
    ],
    declarations: [
        AppComponent,
        routingComponents
    ],
    bootstrap: [ AppComponent ]
})
export class AppModule {}

编辑2:

app.component

import { Component } from '@angular/core';

@Component({
    selector: 'song-app',
    templateUrl: './App.component.html'
})
export class AppComponent {
    title = 'Song List App';
}

我正在使用的模板只是一个带有title变量的简单div。

2 个答案:

答案 0 :(得分:0)

那么在尝试减少任何额外的东西以确定原因后我发现我在html文件中调用了zone.js但是我错过了URL中的/dist/文件夹,所以它从来没有真正调用区域,它打开了一系列其他问题,但现在它实际上给出了一个错误。

答案 1 :(得分:0)

您的选择器标记(<song-app>)应放在加载bundle.js文件的行上方,因为bundle.js可以使用<song-app>元素来加载组件模板。

在index.html中:

 <body>
            <script src="../node_modules/zone.js/zone.js"></script>
            <script src="../node_modules/reflect-metadata/Reflect.js"></script>
            <song-app></song-app>
            <script src="./../dist/app.bundle.js"></script>

        </body>