当我从package.json文件运行build:prod命令时,编译成功构建,但无法删除.ngsummary.json文件以及所有.ngfactory.ts文件
package.json文件:
{
"name": "name",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"build": "del-cli public/js/app && webpack --config webpack.config.dev.js --progress --profile --watch",
"build:prod": "del-cli public/js/app && ngc -p tsconfig.aot.json && ngc -p tsconfig.aot.json && webpack --config webpack.config.prod.js --progress --profile --bail && del-cli 'public/js/app/**/*.js' 'public/js/app/**/*.js.map' '!public/js/app/bundle.js' '!public/js/app/*.chunk.js' 'assets/app/**/*.*.ngfactory.ts' 'assets/app/**/*.shim.ts' 'assets/app/**/*.ngsummary.json' 'assets/app/**/*.ngstyle.ts'"
},
"dependencies": {
"@angular/animations": "^4.4.3",
"@angular/cdk": "github:angular/cdk-builds",
"@angular/cli": "^1.4.2",
"@angular/common": "^4.4.3",
"@angular/compiler": "^4.4.3",
"@angular/compiler-cli": "^4.4.3",
"@angular/core": "^4.4.3",
"@angular/forms": "^4.4.3",
"@angular/http": "^4.4.3",
"@angular/platform-browser": "^4.4.3",
"@angular/platform-browser-dynamic": "^4.4.3",
"@angular/platform-server": "^4.4.3",
"@angular/router": "^4.4.3",
"@angular/upgrade": "^4.4.3",
"bcryptjs": "^2.4.3",
"body-parser": "~1.17.1",
"cookie-parser": "~1.4.3",
"core-js": "^2.5.1",
"debug": "~2.6.3",
"express": "^4.15.5",
"hammerjs": "^2.0.8",
"hbs": "~4.0.1",
"jsonwebtoken": "^8.0.1",
"mongoose": "^4.11.12",
"mongoose-unique-validator": "^1.0.6",
"morgan": "~1.8.1",
"portfinder": "^1.0.13",
"reflect-metadata": "^0.1.10",
"rxjs": "^5.4.3",
"serve-favicon": "~2.4.2",
"webpack": "^3.6.0",
"zone.js": "^0.8.17"
},
"devDependencies": {
"@types/core-js": "0.9.36",
"@types/node": "6.0.45",
"angular-router-loader": "^0.6.0",
"angular2-template-loader": "^0.6.2",
"awesome-typescript-loader": "^3.1.2",
"del-cli": "^0.2.0",
"file-loader": "^1.1.5",
"html-loader": "^0.4.4",
"html-webpack-plugin": "^2.30.1",
"image-webpack-loader": "^3.4.2",
"raw-loader": "^0.5.1",
"style-loader": "^0.18.2",
"ts-loader": "^2.0.3",
"typescript": "^2.5.2",
"webpack": "^2.2.1",
"webpack-merge": "^4.1.0"
}
}
具体参考此命令:
"build:prod": "del-cli public/js/app && ngc -p tsconfig.aot.json && ngc -p tsconfig.aot.json && webpack --config webpack.config.prod.js --progress --profile --bail && del-cli 'public/js/app/**/*.js' 'public/js/app/**/*.js.map' '!public/js/app/bundle.js' '!public/js/app/*.chunk.js' 'assets/app/**/*.*.ngfactory.ts' 'assets/app/**/*.shim.ts' 'assets/app/**/*.ngsummary.json' 'assets/app/**/*.ngstyle.ts'"
当构建成功时,我的项目变得混乱.ngsummary.json& ngfactory.ts文件,应该由build:prod脚本删除。所有其他文件类型都被删除(它们不会显示在我的工作目录中,但只会显示在目标目录中)。
我想我应该包含我的webpack.config文件 - 这些文件分为3:
webpack.config.common.js:
var webpack = require('webpack');
module.exports = {
entry: {
'app': './assets/app/main.ts'
},
resolve: {
extensions: ['.js', '.ts']
},
module: {
rules: [
{
test: /\.html$/,
use: [{ loader: 'html-loader' }]
},
{
test: /\.css$/,
use: [{ loader: 'raw-loader' }]
}
],
exprContextCritical: false
}
};
webpack.config.dev.js:
var path = require('path');
var webpackMerge = require('webpack-merge');
var commonConfig = require('./webpack.config.common.js');
module.exports = webpackMerge(commonConfig, {
devtool: 'cheap-module-eval-source-map',
output: {
path: path.resolve(__dirname + '/public/js/app'),
publicPath: "/js/app/",
filename: 'bundle.js',
chunkFilename: '[id].chunk.js'
},
module: {
rules: [
{
test: /\.ts$/,
use: [
{loader: 'awesome-typescript-loader', options: {
transpileOnly: true
}},
{loader: 'angular2-template-loader'},
{loader: 'angular-router-loader'}
]
}
]
}
});
webpack.config.prod.js:
var path = require('path');
var webpack = require('webpack');
var webpackMerge = require('webpack-merge');
var commonConfig = require('./webpack.config.common.js');
module.exports = webpackMerge.smart(commonConfig, {
entry: {
'app': './assets/app/main.aot.ts'
},
output: {
path: path.resolve(__dirname + '/public/js/app'),
filename: 'bundle.js',
publicPath: '/js/app/',
chunkFilename: '[id].[hash].chunk.js'
},
module: {
rules: [
{
test: /\.ts$/,
use: [
'awesome-typescript-loader',
'angular2-template-loader',
'angular-router-loader?aot=true'
]
}
]
},
plugins: [
new webpack.optimize.UglifyJsPlugin({
sourceMap: false
})
]
});
我正在使用Windows 10,如果它与操作系统权限有关 - 我怀疑,但你永远不知道。
编辑: 我想我应该添加tsconfig.json:
{
"compilerOptions": {
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es5",
"dom"
]
}
}
和tsconfig.aot.json:
{
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "./public/js/app"
},
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es5",
"dom"
],
"angularCompilerOptions": {
"skipMetadataEmit": true
}
}
答案 0 :(得分:1)
我有一个同样的问题,解决方案是tsconfig.aot.json
{
"compilerOptions": {
"target": "es6",
"module": "es2015",
"moduleResolution": "node",
"sourceMap": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false,
"outDir": "./public/js/app"
},
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es5",
"es6",
"es2015",
"es2017",
"dom",
"scripthost"
],
"angularCompilerOptions": {
"skipMetadataEmit": true
}
}
tsconfig.json
{
"compilerOptions": {
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es5",
"es2015",
"es2017",
"dom",
"scripthost"
]
}
}
答案 1 :(得分:0)
我遇到了一些类似的问题,使我的产品构建成功后得以清理。我的示例项目与OP非常相似。最大的不同是我使用的是最新的Angular版本,当前版本为7.2.9。我没有按照建议更改lib部分。我从每个路径描述中删除了单引号。所以代替这个(来自我的package.json):
"build:prod": "del-cli dist && ngc -p tsconfig.aot.json && ngc -p tsconfig.aot.json && webpack --config webpack.config.prod.js --progress --profile --bail
&& del-cli 'src/**/*.js' 'src/app/**/*.ngfactory.ts' 'src/app/**/*.js.map'
我这样做了:
"build:prod": "del-cli dist && ngc -p tsconfig.aot.json && ngc -p tsconfig.aot.json && webpack --config webpack.config.prod.js --progress --profile --bail
&& del-cli src/**/*.js src/app/**/*.ngfactory.ts src/app/**/*.js.map
这确实对我有用。我意识到Angular 4(OP的版本)和Angular 7(我的版本)之间有很大的差距,但是我的问题似乎与OP相同。我的猜测是del-cli lib在一段时间内没有显着变化。
添加了相关的package.json:
"dependencies": {
"@angular/common": "^7.2.9",
"@angular/compiler": "^7.2.9",
"@angular/compiler-cli": "^7.2.9",
"@angular/core": "^7.2.9",
"@angular/forms": "^7.2.9",
"@angular/http": "^7.2.9",
"@angular/platform-browser": "^7.2.9",
"@angular/platform-browser-dynamic": "^7.2.9",
"@angular/platform-server": "^7.2.9",
"@angular/router": "^7.2.9",
"@angular/upgrade": "^7.2.9",
"core-js": "^2.6.5",
"rxjs": "^6.4.0",
"zone.js": "^0.8.29"
},
"devDependencies": {
"@ngtools/webpack": "^7.3.6",
"@types/core-js": "^2.5.0",
"@types/node": "^11.11.3",
"angular-router-loader": "^0.8.5",
"angular2-template-loader": "^0.6.2",
"awesome-typescript-loader": "^5.2.1",
"del-cli": "^1.1.0",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"raw-loader": "^1.0.0",
"typescript": "^3.2.4",
"webpack": "^4.29.6",
"webpack-cli": "^3.3.0",
"webpack-dev-server": "^3.2.1",
"webpack-merge": "^4.2.1"
}
注意:我正在Windows 10系统上运行。