Ich verliere die Hoffnung hier ... Keine Ahnung, was falsch ist und ich kann nicht scheinen, eine anständige Lösung zu finden. Ich versuche Aot mit @ ngtools/webpack zu implementieren, aber bekomme diesen Fehler, ERROR in AppModule is not an NgModule
und es scheint, was auch immer ich tue, nichts hilft. Es gibt einige Beispiele dafür, wie dieses Problem mit angular-cli behoben werden kann, aber sie scheinen nicht mit webpack zu funktionieren.Angular 4 @ ngtools/webpack FEHLER in AppModule ist kein NgModule
Wer ist auf dieses Problem gestoßen oder kennt eine Lösung?
Meine webpack config:
const webpack = require('webpack');
const conf = require('./gulp.conf');
const path = require('path');
const Aot = require('@ngtools/webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const FailPlugin = require('webpack-fail-plugin');
const autoprefixer = require('autoprefixer');
module.exports = {
module: {
rules: [
{
test: /\.json$/,
loaders: [
'json-loader'
]
},
{
test: /\.(css|scss)$/,
loaders: [
'style-loader',
'css-loader',
'sass-loader',
'postcss-loader'
]
},
{
test: /\.ts$/,
loader: '@ngtools/webpack',
},
{
test: /\.html$/,
loaders: [
'html-loader'
]
}
]
},
plugins: [
new Aot.AotPlugin({
tsConfigPath: '../ui/tsconfig.json',
entryModule: __dirname + '/../src/index.ts#AppModule'
}),
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
FailPlugin,
new HtmlWebpackPlugin({
template: conf.path.src('index.html')
}),
new webpack.ContextReplacementPlugin(
/angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/,
conf.paths.src
),
new webpack.ContextReplacementPlugin(
/angular(\\|\/)core(\\|\/)@angular/,
path.resolve(__dirname, '../src')
)
],
devtool: 'source-map',
output: {
path: path.join(process.cwd(), conf.paths.tmp),
filename: 'index.js'
},
resolve: {
extensions: [
'.webpack.js',
'.web.js',
'.js',
'.ts'
]
},
entry: `./${conf.path.src('index')}`
};
Package.json Datei:
{
"name": "stiqqs",
"version": "1.0.0",
"description": "",
"license": "",
"dependencies": {
"@angular/animations": "^4.3.6",
"@angular/common": "^4.1.0",
"@angular/compiler": "^4.1.0",
"@angular/compiler-cli": "^4.4.0-RC.0",
"@angular/core": "^4.1.0",
"@angular/forms": "^4.1.0",
"@angular/http": "^4.1.0",
"@angular/platform-browser": "^4.1.0",
"@angular/platform-browser-dynamic": "^4.1.0",
"@angular/router": "^4.1.0",
"@ngtools/webpack": "^1.6.2",
"@types/node": "^7.0.16",
"angular2-notifications": "^0.7.3",
"core-js": "*",
"gulp": "github:gulpjs/gulp#4ed9a4a3275559c73a396eff7e1fde3824951ebb",
"gulp-hub": "github:frankwallis/gulp-hub#d461b9c700df9010d0a8694e4af1fb96d9f38bf4",
"hammerjs": "^2.0.8",
"ng2-completer": "^1.4.0",
"ng2-metadata": "^1.4.2-final",
"ngx-modal": "0.0.29",
"ngx-pagination": "^3.0.0",
"rxjs": "^5.3.1",
"time-ago-pipe": "^1.2.1",
"tslint-loader": "^3.5.3",
"typescript": "^2.3.2",
"webpack": "^2.5.0",
"zone.js": "^0.8.10"
},
"devDependencies": {
"@types/es6-shim": "^0.31.32",
"@types/jasmine": "^2.5.43",
"@types/node": "^7.0.5",
"autoprefixer": "^6.7.3",
"babel-eslint": "^7.1.1",
"babel-loader": "^6.3.2",
"browser-sync": "^2.18.8",
"browser-sync-spa": "^1.0.3",
"compression-webpack-plugin": "^0.4.0",
"css-loader": "^0.26.1",
"del": "^2.2.2",
"es6-shim": "^0.35.3",
"eslint": "^3.15.0",
"eslint-config-xo-space": "^0.15.0",
"eslint-loader": "^1.6.1",
"eslint-plugin-babel": "^4.0.1",
"extract-text-webpack-plugin": "^2.0.0-rc.3",
"gulp": "gulpjs/gulp#4ed9a4a3275559c73a396eff7e1fde3824951ebb",
"gulp-filter": "^5.0.0",
"gulp-hub": "frankwallis/gulp-hub#d461b9c700df9010d0a8694e4af1fb96d9f38bf4",
"gulp-sass": "^3.1.0",
"gulp-util": "^3.0.8",
"html-loader": "^0.4.4",
"html-webpack-plugin": "^2.28.0",
"json-loader": "^0.5.4",
"node-sass": "^4.5.0",
"postcss-loader": "^1.3.1",
"rimraf": "^2.5.1",
"sass-loader": "^6.0.1",
"style-loader": "^0.13.1",
"tslint": "^4.4.2",
"tslint-loader": "^3.4.2",
"typescript": "^2.1.5",
"webpack": "^2.5.0",
"webpack-deploy": "github:productboard/webpack-deploy",
"webpack-fail-plugin": "^1.0.5"
},
"scripts": {
"build": "rimraf dist && webpack --progress --profile --bail --config ./conf/webpack-dist.conf.js && cp -r ./src/css ./dist && cp -r ./src/img ./dist && mkdir -p ./dist/app/views && cp -r ./src/app/views/* ./dist/app/views/",
"serve": "gulp serve watch",
"serve:dist": "gulp serve:dist",
"test": "gulp test",
"test:auto": "gulp test:auto",
"deploy": "webpack -p --config ./conf/webpack-dist.conf.js"
},
"eslintConfig": {
"root": true,
"env": {
"browser": true,
"jasmine": true
},
"parser": "babel-eslint",
"extends": [
"xo-space/esnext"
]
},
"repository": {}
}
index.ts
import 'core-js/client/shim';
import 'zone.js/dist/zone';
import '@angular/common';
import 'rxjs';
import {enableProdMode} from '@angular/core';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app/index';
declare var process: any;
if (process.env.NODE_ENV === 'production') {
enableProdMode();
} else {
Error['stackTraceLimit'] = Infinity; // tslint:disable-line:no-string-literal
require('zone.js/dist/long-stack-trace-zone'); // tslint:disable-line:no-var-requires
}
platformBrowserDynamic().bootstrapModule(AppModule);
EDIT:
Ok , So .ts von index.ts # AppModule in entryModule
Entfernung:
new Aot.AotPlugin({
tsConfigPath: '../ui/tsconfig.json',
entryModule: __dirname + '/../src/app/index#AppModule' <-- HERE
}),
scheint, dass Fehler zu entfernen, aber dann die App scheint nicht so aot kompiliert werden. Die Dateigröße sprang ähnlich wie tsc
von 1,92 MB auf 4,42 MB. (in Entwicklung keine Kompressionen oder Minification). Ich habe eine seiner etwas Gefühl zu tun:
entry: `./${conf.path.src('index')}`
aber nicht sicher, wie es zu beheben :)
Ich habe nicht erwähnt, dass diese App weit über den Boilerplattenstadium entfernt ist :) Gute Punkte über platformBrowser() gemacht. BoostrapModuleFactory() ich probiere es aus, aber ich habe das Gefühl, dass es nur von angular-cli und @ ngtools/webpack kompiliert wird Dateien in den Arbeitsspeicher und nicht in physische Dateien. (Ich könnte hier sehr falsch sein :)) – TSlegaitis