شروع به کار با AngularJS 2.0 و TypeScript - قسمت دوازدهم - توزیع برنامه
نویسنده: وحید نصیری
تاریخ: ۱۳۹۵/۰۲/۱۹ ۲۱:۳۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
"devDependencies": {
"typescript": "^1.8.10",
"gulp": "^3.9.1",
"path": "^0.12.7",
"gulp-clean": "^0.3.2",
"fs": "^0.0.2",
"gulp-concat": "^2.6.0",
"gulp-typescript": "^2.13.1",
"gulp-tsc": "^1.1.5",
"del": "^2.2.0",
"gulp-autoprefixer": "^3.1.0",
"gulp-cssnano": "^2.0.0",
"gulp-html-replace": "^1.5.4",
"gulp-htmlmin": "^1.0.5",
"gulp-uglify": "^1.5.3",
"merge-stream": "^1.0.0",
"systemjs-builder": "^0.15.16",
"typings": "^0.8.1"
}, var gulp = require("gulp"),
concat = require("gulp-concat"),
tsc = require("gulp-typescript"),
jsMinify = require("gulp-uglify"),
cssPrefixer = require("gulp-autoprefixer"),
cssMinify = require("gulp-cssnano"),
del = require("del"),
merge = require("merge-stream"),
minifyHTML = require('gulp-htmlmin'),
SystemBuilder = require("systemjs-builder");
var appFolder = "./app";
var outFolder = "wwwroot";
gulp.task("clean", () => {
return del(outFolder);
});
gulp.task("shims", () => {
return gulp.src([
"node_modules/es6-shim/es6-shim.js",
"node_modules/zone.js/dist/zone.js",
"node_modules/reflect-metadata/Reflect.js"
])
.pipe(concat("shims.js"))
.pipe(jsMinify())
.pipe(gulp.dest(outFolder + "/js/"));
});
gulp.task("tsc", () => {
var tsProject = tsc.createProject("./tsconfig.json");
var tsResult = gulp.src([
appFolder + "/**/*.ts"
])
.pipe(tsc(tsProject), undefined, tsc.reporter.fullReporter());
return tsResult.js.pipe(gulp.dest("build/"));
});
gulp.task("system-build", ["tsc"], () => {
var builder = new SystemBuilder();
return builder.loadConfig("systemjs.config.js")
.then(() => builder.buildStatic(appFolder, outFolder + "/js/bundle.js"))
.then(() => del("build"));
});
gulp.task("buildAndMinify", ["system-build"], () => {
var bundle = gulp.src(outFolder + "/js/bundle.js")
.pipe(jsMinify())
.pipe(gulp.dest(outFolder + "/js/"));
var css = gulp.src(outFolder + "/css/styles.css")
.pipe(cssMinify())
.pipe(gulp.dest(outFolder + "/css/"));
return merge(bundle, css);
});
gulp.task("favicon", function () {
return gulp.src("./app/favicon.ico")
.pipe(gulp.dest(outFolder));
});
gulp.task("css", function () {
return gulp.src(appFolder + "/**/*.css")
.pipe(cssPrefixer())
.pipe(cssMinify())
.pipe(gulp.dest(outFolder));
});
gulp.task("templates", function () {
return gulp.src(appFolder + "/**/*.html")
.pipe(minifyHTML())
.pipe(gulp.dest(outFolder));
});
gulp.task("assets", ["templates", "css", "favicon"], function () {
return gulp.src(appFolder + "/**/*.png")
.pipe(gulp.dest(outFolder));
});
gulp.task("otherScriptsAndStyles", () => {
gulp.src([
"jquery/dist/jquery.*js",
"bootstrap/dist/js/bootstrap*.js"
], {
cwd: "node_modules/**"
})
.pipe(gulp.dest(outFolder + "/js/"));
gulp.src([
"node_modules/bootstrap/dist/css/bootstrap.css"
]).pipe(cssMinify()).pipe(gulp.dest(outFolder + "/css/"));
gulp.src([
"node_modules/bootstrap/fonts/*.*"
]).pipe(gulp.dest(outFolder + "/fonts/"));
});
//gulp.task("watch.tsc", ["tsc"], function () {
// return gulp.watch(appFolder + "/**/*.ts", ["tsc"]);
//});
//gulp.task("watch", ["watch.tsc"]);
gulp.task("default", [
"shims",
"buildAndMinify",
"assets",
"otherScriptsAndStyles"
//,"watch"
]); var appFolder = "./app"; var outFolder = "wwwroot";
<!DOCTYPE html>
<html>
<head>
<base href="/">
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
<link href="~/wwwroot/css/bootstrap.css" rel="stylesheet" />
<link href="~/wwwroot/app.component.css" rel="stylesheet" />
<link href="~/Content/Site.css" rel="stylesheet" type="text/css" />
<script src="~/wwwroot/js/shims.js"></script>
</head>
<body>
<div>
@RenderBody()
<pm-app>Loading App...</pm-app>
</div>
<script src="~/wwwroot/js/jquery/dist/jquery.min.js"></script>
<script src="~/wwwroot/js/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="~/wwwroot/js/bundle.js"></script>
@RenderSection("Scripts", required: false)
</body>
</html> npm install -g angular-cli
ng new AngularCLIDemoApp
ng build -prod
import { Component } from '@angular/core';
import '../../public/css/styles.css';
@Component({
selector: 'my-app',
template: require('./app.component.html'),
styles: [require('./app.component.css')]
})
export class AppComponent { } {
"ambientDependencies": {
"es6-shim": "registry:dt/es6-shim#0.31.2+20160317120654",
"jasmine": "registry:dt/jasmine#2.2.0+20160412134438",
"node": "registry:dt/node#4.0.0+20160509154515"
}
} /// <reference path="../typings/browser/ambient/es6-shim/index.d.ts" />
/// <reference path="../typings/browser/ambient/node/index.d.ts" />
import { bootstrap } from '@angular/platform-browser-dynamic';
import { enableProdMode } from '@angular/core';
// Our main component
import { AppComponent } from "./app.component";
if (process.env.ENV === "production") {
enableProdMode();
}
bootstrap(AppComponent, []); @Component({
selector: 'pm-products',
//templateUrl: 'app/products/product-list.component.html',
template: require('./product-list.component.html'),
//styleUrls: ['app/products/product-list.component.css'],
styles: [require('./product-list.component.css')],
pipes: [ProductFilterPipe],
directives: [StarComponent, ROUTER_DIRECTIVES]
}) template: require('./app.component.html'), var embedTemplates = require('gulp-angular-embed-templates');
gulp.task("tsc", () => {
var tsProject = tsc.createProject("./tsconfig.json");
var tsResult = gulp.src([appFolder + "/**/*.ts"])
.pipe(embedTemplates({
debug: true,
basePath: "./",
sourceType: "ts",
minimize: {
empty: true,
spare: true,
quotes: true,
dom: {
xmlMode: true,
lowerCaseAttributeNames: false,
lowerCaseTags: false
}
}
})) // inline templates
.pipe(tsc(tsProject), undefined, tsc.reporter.fullReporter());
return tsResult.js.pipe(gulp.dest(appFolder));
}); {
"name": "mainmodule",
"version": "1.0.0",
"scripts": {
"build": "webpack --progress",
"build:prod": "webpack -p --progress",
"serve": "webpack-dev-server --inline --progress ",
"postinstall": "typings install"
},
"dependencies": {
"@angular/common": "2.0.0-rc.5",
"@angular/compiler": "2.0.0-rc.5",
"@angular/core": "2.0.0-rc.5",
"@angular/forms": "0.3.0",
"@angular/http": "2.0.0-rc.5",
"@angular/platform-browser": "2.0.0-rc.5",
"@angular/platform-browser-dynamic": "2.0.0-rc.5",
"@angular/router": "3.0.0-rc.1",
"core-js": "^2.4.0",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.6",
"typings": "^1.4.0",
"zone.js": "^0.6.12"
},
"devDependencies": {
"html-webpack-plugin": "^2.22.0",
"ts-loader": "^0.9.0",
"typescript": "^2.0.3",
"typings": "^1.4.0",
"webpack": "^1.13.2",
"webpack-dev-server": "^1.16.2"
}
}
gulp.task("templates", function () {
return gulp.src(appFolder + "/**/*.html")
//.pipe(minifyHTML())
.pipe(gulp.dest(outFolder + "/app"));
}); minifyHTML({
empty: true,
spare: true,
quotes: true,
dom: {
xmlMode: true,
lowerCaseAttributeNames: false,
lowerCaseTags: false
}
}) var builder = new SystemBuilder();
return builder.loadConfig("systemjs.config.js")
.then(() => builder.buildStatic(appFolder, outFolder + "/js/bundle.js"))
.then(() => del("build")); var appFolder = "./app"; var outFolder = "wwwroot";
gulpfile.js systemjs.config.js --app --wwwroot