লাইভ ওয়েব সার্ভারে উত্পাদনের জন্য কৌণিক (সংস্করণ 2, 4, 6, ...) বান্ডিল করার সর্বোত্তম পদ্ধতি কী?
দয়া করে উত্তরের মধ্যে কৌনিক সংস্করণ অন্তর্ভুক্ত করুন যাতে এটি পরে প্রকাশে সঞ্চারিত হলে আমরা আরও ভাল ট্র্যাক করতে পারি।
লাইভ ওয়েব সার্ভারে উত্পাদনের জন্য কৌণিক (সংস্করণ 2, 4, 6, ...) বান্ডিল করার সর্বোত্তম পদ্ধতি কী?
দয়া করে উত্তরের মধ্যে কৌনিক সংস্করণ অন্তর্ভুক্ত করুন যাতে এটি পরে প্রকাশে সঞ্চারিত হলে আমরা আরও ভাল ট্র্যাক করতে পারি।
উত্তর:
2.x, 4.x, 5.x, 6.x, 7.x, 8.x, 9.x
(টাইপস্ক্রিপ্ট) কৌনিক সিএলআই সহnpm install -g @angular/cli
ng new projectFolder
একটি নতুন অ্যাপ্লিকেশন তৈরি করেng build --prod
(ডিরেক্টরি থাকলে কমান্ড লাইনে রান করুন projectFolder
)
prod
উত্পাদনের জন্য পতাকা বান্ডেল ( উত্পাদনের পতাকার সাথে অন্তর্ভুক্ত বিকল্পের তালিকার জন্য কৌনিক ডকুমেন্টেশন দেখুন )।
নিম্নলিখিত কমান্ডটি ব্যবহার করে ব্রোটলি সংক্ষেপণগুলি ব্যবহার করে সংকোচন করুন
for i in dist/*; do brotli $i; done
প্রোজেক্টফোল্ডার / ডিস্টে (/ $ প্রোজেক্ট ফোল্ডার 6 এর জন্য) বান্ডিলগুলি ডিফল্টরূপে উত্পন্ন হয়
9.0.0
সিএলআই সহ কৌণিক সহ মাপ 9.0.1
এবং কৌণিক রাউটিং ছাড়াই সিএসএস বিকল্প
dist/main-[es-version].[hash].js
আপনার অ্যাপ্লিকেশনটি বান্ডিল করেছে [ES5 আকার: নতুন কৌণিক সিএলআই অ্যাপ্লিকেশন খালি জন্য 158 কেবি, 40 কেবি সংক্ষেপিত]।dist/polyfill-[es-version].[hash].bundle.js
পলিফিল নির্ভরতা (@ অংগুলার, আরএক্সজেএস ...) বান্ডিল হয়েছে [ইএস 5 আকার: নতুন কৌণিক সিএলআই অ্যাপ্লিকেশন খালি জন্য 127 কেবি, 37 কেবি সঙ্ক্রিত]।dist/index.html
আপনার আবেদনের প্রবেশ বিন্দু।dist/runtime-[es-version].[hash].bundle.js
ওয়েবপ্যাক লোডারdist/style.[hash].bundle.css
শৈলীর সংজ্ঞাdist/assets
অ্যাঙ্গুলার সিএলআই সম্পদ কনফিগারেশন থেকে অনুলিপি করা সংস্থানগুলিng serve --prod
স্থানীয় এইচটিটিপি সার্ভার শুরু করার জন্য কমান্ডটি ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনটির পূর্বরূপ পেতে পারেন যেমন উত্পাদন ফাইল সহ অ্যাপ্লিকেশনটি http: // লোকালহস্ত: 4200 ব্যবহার করে অ্যাক্সেসযোগ্য ।
উত্পাদন ব্যবহারের জন্য, আপনাকে dist
ফোল্ডার থেকে সমস্ত ফাইল আপনার পছন্দের HTTP সার্ভারে স্থাপন করতে হবে ।
2.0.1 Final
গুল্প ব্যবহার করে (টাইপস্ক্রিপ্ট - টার্গেট: ইএস 5)npm install
(ডিরেক্টরি প্রকল্পের ফোল্ডার হলে সেমিডিতে চালিত হবে)npm run bundle
(ডিরেক্টরি প্রকল্পের ফোল্ডার হলে সেমিডিতে চালিত হবে)
প্রকল্প ফোল্ডার / বান্ডেল / এ বান্ডিলগুলি উত্পাদিত হয়
bundles/dependencies.bundle.js
[ আকার: MB 1 এমবি (যতটা সম্ভব ছোট)]
bundles/app.bundle.js
[ আকার: আপনার প্রকল্পের উপর নির্ভর করে , খনিটি ~ 0.5 এমবি ]
var gulp = require('gulp'),
tsc = require('gulp-typescript'),
Builder = require('systemjs-builder'),
inlineNg2Template = require('gulp-inline-ng2-template');
gulp.task('bundle', ['bundle-app', 'bundle-dependencies'], function(){});
gulp.task('inline-templates', function () {
return gulp.src('app/**/*.ts')
.pipe(inlineNg2Template({ useRelativePaths: true, indent: 0, removeLineBreaks: true}))
.pipe(tsc({
"target": "ES5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true,
"noImplicitAny": false
}))
.pipe(gulp.dest('dist/app'));
});
gulp.task('bundle-app', ['inline-templates'], function() {
// optional constructor options
// sets the baseURL and loads the configuration file
var builder = new Builder('', 'dist-systemjs.config.js');
return builder
.bundle('dist/app/**/* - [@angular/**/*.js] - [rxjs/**/*.js]', 'bundles/app.bundle.js', { minify: true})
.then(function() {
console.log('Build complete');
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});
});
gulp.task('bundle-dependencies', ['inline-templates'], function() {
// optional constructor options
// sets the baseURL and loads the configuration file
var builder = new Builder('', 'dist-systemjs.config.js');
return builder
.bundle('dist/app/**/*.js - [dist/app/**/*.js]', 'bundles/dependencies.bundle.js', { minify: true})
.then(function() {
console.log('Build complete');
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});
});
{
"name": "angular2-quickstart",
"version": "1.0.0",
"scripts": {
***
"gulp": "gulp",
"rimraf": "rimraf",
"bundle": "gulp bundle",
"postbundle": "rimraf dist"
},
"license": "ISC",
"dependencies": {
***
},
"devDependencies": {
"rimraf": "^2.5.2",
"gulp": "^3.9.1",
"gulp-typescript": "2.13.6",
"gulp-inline-ng2-template": "2.0.1",
"systemjs-builder": "^0.15.16"
}
}
(function(global) {
// map tells the System loader where to look for things
var map = {
'app': 'app',
'rxjs': 'node_modules/rxjs',
'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api',
'@angular': 'node_modules/@angular'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'app/boot.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { defaultExtension: 'js' }
};
var packageNames = [
'@angular/common',
'@angular/compiler',
'@angular/core',
'@angular/forms',
'@angular/http',
'@angular/platform-browser',
'@angular/platform-browser-dynamic',
'@angular/router',
'@angular/router-deprecated',
'@angular/testing',
'@angular/upgrade',
];
// add package entries for angular packages in the form '@angular/common': { main: 'index.js', defaultExtension: 'js' }
packageNames.forEach(function(pkgName) {
packages[pkgName] = { main: 'index.js', defaultExtension: 'js' };
});
var config = {
map: map,
packages: packages
};
// filterSystemConfig - index.asp's chance to modify config before we register it.
if (global.filterSystemConfig) { global.filterSystemConfig(config); }
System.config(config);
})(this);
var map = {
'app': 'dist/app',
};
dist-systemjs.config.js
বান্ডিল ট্যাগগুলির পরে ট্যাগ স্থাপনের পরেও প্রোগ্রামটি চলতে দেওয়া হত তবে নির্ভরতা বান্ডিলটিকে উপেক্ষা করা হবে এবং node_modules
ফোল্ডার থেকে নির্ভরতা লোড করা হবে ।<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<base href="/"/>
<title>Angular</title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<my-app>
loading...
</my-app>
<!-- Polyfill(s) for older browsers -->
<script src="node_modules/core-js/client/shim.min.js"></script>
<script src="node_modules/zone.js/dist/zone.min.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.js"></script>
<script src="dist-systemjs.config.js"></script>
<!-- Project Bundles. Note that these have to be loaded AFTER the systemjs.config script -->
<script src="bundles/dependencies.bundle.js"></script>
<script src="bundles/app.bundle.js"></script>
<script>
System.import('app/boot').catch(function (err) {
console.error(err);
});
</script>
</body>
</html>
আমি এখনও করতে পারেন সেরা :)
inline-templates
চালানো হয় তখন টেমপ্লেটগুলি ইনলাইন করে তারপরে সমস্ত অ্যাপ ফোল্ডার এবং ফাইলগুলির একটি অনুলিপি তৈরি করে dist/app
। তারপর dist-systemjs.config.js
আপনি মানচিত্রে app
করতে dist/app
যা একটি ফোল্ডার যে যদি আপনি ব্যবহার থাকবে না হয় dist
রুট হিসাবে ফোল্ডার। আপনি কি আপনার অ্যাপ্লিকেশনটি dist
ফোল্ডার থেকে চালাতে চান না ? এবং যদি এটি হয় তবে আপনার কাছে dist
ফোল্ডারটি রুট dist
ফোল্ডারে নেই। আমি অবশ্যই এখানে অন্য কিছু মিস করছি। আপনার বান্ডিলযুক্ত ফাইলগুলি ব্যবহার করার জন্য সিস্টেমজগুলিকে বলার দরকার নেই dist/app
ফোল্ডারে থাকা সাধারণ ফাইলগুলি নয় ?
অ্যাঙ্গুলার 2 টিম ওয়েবপ্যাক ব্যবহারের জন্য একটি টিউটোরিয়াল প্রকাশ করেছিল
আমি টিউটোরিয়াল থেকে ফাইলগুলি তৈরি করেছি এবং একটি ছোট গিটহাব বীজ প্রকল্পে রেখেছি । সুতরাং আপনি দ্রুত ওয়ার্কফ্লো চেষ্টা করতে পারেন।
নির্দেশাবলী :
এনপিএম ইনস্টল
এনপিএম শুরু । উন্নয়নের জন্য। এটি একটি ভার্চুয়াল "ডিস" ফোল্ডার তৈরি করবে যা আপনার লোকালহোস্ট ঠিকানায় লাইভলোড করা হবে।
এনপিএম রান বিল্ড । উত্পাদনের জন্য। "এটি কোনও ওয়েবসার্ভারে প্রেরণের চেয়ে একটি শারীরিক" ডিস "ফোল্ডার সংস্করণ তৈরি করবে dist
এই ওয়েবপ্যাক স্টার্টার কিট উপরের টিউটোরিয়ালের চেয়ে আরও কয়েকটি পরীক্ষামূলক বৈশিষ্ট্য সরবরাহ করে এবং বেশ জনপ্রিয় বলে মনে হয়।
Angular.io এর দ্রুত শুরু করার টিউটোরিয়াল রয়েছে। আমি এই টিউটোরিয়ালটি অনুলিপি করে ডিস্ট ফোল্ডারে যা কিছুটা সার্ভারে অনুলিপি করা যায় এবং ঠিক তেমনভাবে কাজ করা যায় তার জন্য বান্ডিল করার জন্য কিছু সাধারণ গল্প টাস্কের সাথে প্রসারিত করেছি। আমি জেনকিস সিআই-তে ভাল কাজ করার জন্য সবকিছুকে অনুকূলিত করার চেষ্টা করেছি, তাই নোড_মডিউলগুলি ক্যাশে করা যায় এবং অনুলিপি করার দরকার নেই।
গিথুবে নমুনা অ্যাপ্লিকেশন সহ উত্স কোড: https://github.com/Anjmao/angular2- উত্পাদনের- ফ্লো
উত্পাদন পদক্ষেপনোড : আপনি সর্বদা নিজের বিল্ড প্রক্রিয়াটি তৈরি করতে পারবেন তবে আমি কৌণিক-ক্লাইটি ব্যবহার করার জন্য অত্যন্ত পরামর্শ দিচ্ছি কারণ এটির প্রয়োজনীয় সমস্ত কর্মপ্রবাহ রয়েছে এবং এটি এখন পুরোপুরি কার্যকর হয়। আমরা ইতিমধ্যে এটি উত্পাদনে ব্যবহার করছি এবং কৌণিক-ক্লিমে কোনও সমস্যা নেই।
এটি সমর্থন করে:
এনজি নতুন প্রকল্পের নাম - রাউটিং
আপনি --style=scss
SASS .scss সমর্থন যোগ করতে পারেন ।
আপনি --ng4
কৌণিক 2 এর পরিবর্তে কৌনিক 4 ব্যবহারের জন্য যুক্ত করতে পারেন ।
প্রকল্পটি তৈরি করার পরে, সিএলআই স্বয়ংক্রিয়ভাবে npm install
আপনার জন্য চালিত হবে । আপনি যদি এর পরিবর্তে সুতাটি ব্যবহার করতে চান, বা কেবল ইনস্টল না করেই প্রকল্পের কঙ্কালের দিকে চেয়ে দেখতে চান, এখানে এটি কীভাবে করবেন তা পরীক্ষা করে দেখুন ।
প্রকল্প ফোল্ডারের ভিতরে:
এনজি বিল্ড-প্রড
বর্তমান সংস্করণে আপনাকে --aot
ম্যানুয়ালি নির্দিষ্ট করতে হবে, কারণ এটি বিকাশ মোডে ব্যবহার করা যেতে পারে (যদিও এটি স্বচ্ছলতার কারণে ব্যবহারিক নয়)।
এটি এমনকি আরও ছোট বান্ডিলগুলির জন্যও AOT সংকলন সম্পাদন করে (কোনও কৌণিক সংকলক, পরিবর্তে, উত্পন্ন সংকলক আউটপুট নয়)। আপনি উত্পাদিত কোডটি আরও ছোট হিসাবে কৌনিক 4 ব্যবহার করলে বান্ডিলগুলি এওটির সাথে অনেক ছোট।
আপনি আপনার অ্যাপ্লিকেশনটি এওটি দিয়ে ডেভলপমেন্ট মোডে (সোর্স ম্যাপস, কোনও মিনিফিকেশন) এবং এওটি চালিয়ে পরীক্ষা করতে পারেন ng build --aot
।
ডিফল্ট আউটপুট dir হয় ./dist
, যদিও এটিতে পরিবর্তন করা যায় ./angular-cli.json
।
বিল্ড স্টেপের ফলাফল নিম্নলিখিত:
(দ্রষ্টব্য: <content-hash>
ফাইলের বিষয়বস্তুর হ্যাশ / ফিঙ্গারপ্রিন্টকে বোঝায় যা ক্যাশে বুস্টিংয়ের উপায় হতে পারে, ওয়েবপ্যাক script
নিজেই ট্যাগ লেখার পরে এটি সম্ভব )
./dist/assets
./src/assets/**
./dist/index.html
./src/index.html
, এতে ওয়েবপ্যাক স্ক্রিপ্টগুলি যুক্ত করার পরে ./angular-cli.json
./dist/inline.js
./dist/main.<content-hash>.bundle.js
./dist/styles.<content-hash>.bundle.js
পুরানো সংস্করণগুলিতে এটি তাদের আকার এবং .map
উত্স ম্যাপ ফাইলগুলি যাচাই করার জন্য জিপিড সংস্করণগুলি তৈরি করেছে , তবে লোকেদের এগুলি সরাতে বলার ফলে এটি আর ঘটছে না।
কিছু অন্যান্য অনুষ্ঠানে, আপনি অন্যান্য অযাচিত ফাইল / ফোল্ডার খুঁজে পেতে পারেন:
./out-tsc/
./src/tsconfig.json
এরoutDir
./out-tsc-e2e/
./e2e/tsconfig.json
এরoutDir
./dist/ngfactory/
<content-hash>
থেকে সরিয়ে ফেলি তবে কী হবে । এটি সর্বশেষ বান্ডিল পেতে সমস্যা হতে পারে?
আজ অবধি আমি এখনও উত্পাদন বান্ডিলিংয়ের সেরা রেসিপি হিসাবে সামনের সময়ের সংকলন কুকবুকটি পাই। আপনি এখানে এটি পেতে পারেন: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html
অ্যাঙ্গুলার 2 এর সাথে আমার এখনও পর্যন্ত অভিজ্ঞতা হল যে এওটি প্রায় কোনও লোডিং সময় না দিয়ে ক্ষুদ্রতম বিল্ডগুলি তৈরি করে। এবং এখানে গুরুত্বপূর্ণ প্রশ্নটি হিসাবে গুরুত্বপূর্ণ - আপনার কেবলমাত্র কয়েকটি ফাইল উত্পাদন করতে পাঠানো প্রয়োজন।
এটি দেখে মনে হচ্ছে কারণ কৌণিক সংকলকটি উত্পাদন বাড়ানোর সাথে প্রেরণ করা হবে না কারণ টেমপ্লেটগুলি "সময়ের পূর্বে" সংকলিত হয়েছে। আপনার এইচটিএমএল টেমপ্লেট মার্কআপটিকে জাভাস্ক্রিপ্ট নির্দেশাবলীতে রূপান্তরিত করে দেখতে খুব শীতল হয়েছে যা প্রকৃত এইচটিএমএলে প্রকৌশলীকে বিপরীত করা খুব কঠিন hard
আমি একটি সাধারণ ভিডিও তৈরি করেছি যেখানে আমি দেব বনাম এওটি বিল্ডে অ্যাংুলার 2 অ্যাপের জন্য ডাউনলোডের আকার, ফাইলের সংখ্যা ইত্যাদি প্রদর্শন করি - যা আপনি এখানে দেখতে পারেন:
আপনি ভিডিওটিতে ব্যবহৃত উত্স কোডটি এখানে পাবেন:
**Production build with
- Angular Rc5
- Gulp
- typescripts
- systemjs**
1)con-cat all js files and css files include on index.html using "gulp-concat".
- styles.css (all css concat in this files)
- shims.js(all js concat in this files)
2)copy all images and fonts as well as html files with gulp task to "/dist".
3)Bundling -minify angular libraries and app components mentioned in systemjs.config.js file.
Using gulp 'systemjs-builder'
SystemBuilder = require('systemjs-builder'),
gulp.task('system-build', ['tsc'], function () {
var builder = new SystemBuilder();
return builder.loadConfig('systemjs.config.js')
.then(function () {
builder.buildStatic('assets', 'dist/app/app_libs_bundle.js')
})
.then(function () {
del('temp')
})
});
4)Minify bundles using 'gulp-uglify'
jsMinify = require('gulp-uglify'),
gulp.task('minify', function () {
var options = {
mangle: false
};
var js = gulp.src('dist/app/shims.js')
.pipe(jsMinify())
.pipe(gulp.dest('dist/app/'));
var js1 = gulp.src('dist/app/app_libs_bundle.js')
.pipe(jsMinify(options))
.pipe(gulp.dest('dist/app/'));
var css = gulp.src('dist/css/styles.min.css');
return merge(js,js1, css);
});
5) In index.html for production
<html>
<head>
<title>Hello</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="utf-8" />
<link rel="stylesheet" href="app/css/styles.min.css" />
<script type="text/javascript" src="app/shims.js"></script>
<base href="https://stackoverflow.com/">
</head>
<body>
<my-app>Loading...</my-app>
<script type="text/javascript" src="app/app_libs_bundle.js"></script>
</body>
</html>
6) Now just copy your dist folder to '/www' in wamp server node need to copy node_modules in www.
আপনি কৌণিক-ক্লিপ-গ্যাজেজগুলিgithub
ব্যবহার করে
আপনার কৌণিক অ্যাপ্লিকেশন স্থাপন করতে পারেন
এই ক্লায়েন্টটি ব্যবহার করে কীভাবে মোস্ত করা যায় তা জানতে লিঙ্কটি দেখুন।
মোতায়েন করা ওয়েবসাইটটি github
সাধারণত কিছু শাখায় সংরক্ষণ করা হবে
GH-পৃষ্ঠাগুলি
ব্যবহার গিট শাখা ক্লোন করতে পারে এবং এটি আপনার সার্ভারে স্থির ওয়েবসাইটের মতো ব্যবহার করতে পারে
"সেরা" দৃশ্যের উপর নির্ভর করে। এমন অনেক সময় আসে যখন আপনি কেবলমাত্র ছোট্ট সম্ভাব্য একক বান্ডিলটি যত্নশীল হন, তবে বড় অ্যাপগুলিতে আপনাকে অলস লোডিং বিবেচনা করতে হতে পারে। এক পর্যায়ে পুরো অ্যাপ্লিকেশনটিকে একক বান্ডিল হিসাবে পরিবেশন করা অবৈধ হয়ে ওঠে।
পরবর্তী ক্ষেত্রে ওয়েবপ্যাকটি সাধারণত সেরা উপায় কারণ এটি কোড বিভাজনকে সমর্থন করে।
একটি বান্ডিলের জন্য আমি রোলআপ, বা বন্ধ সংকলক বিবেচনা করব যদি আপনি সাহসী বোধ করেন :-)
আমি এখানে ব্যবহার করেছি এমন সমস্ত কৌণিক বান্ডিলারের নমুনা তৈরি করেছি: http://www.syntaxsuccess.com/viewarticle/angular-
কোডটি এখানে পাওয়া যাবে: https://github.com/thelgevold/angular-2- উদাহরণ
কৌণিক সংস্করণ: 4.1.x
ওয়েবপ্যাক 3 সহ কেবলমাত্র কৌনিক 4 সেটআপ করুন এক মিনিটের মধ্যে আপনার বিকাশ এবং উত্পাদন ENV বান্ডেল কোনও সমস্যা ছাড়াই প্রস্তুত হয়ে উঠবে কেবল নীচের গিথুব ডক অনুসরণ করুন
বর্তমান প্রকল্প ডিরেক্টরিতে CLI কমান্ডের নীচে চেষ্টা করুন। এটি ডিস্ট ফোল্ডার বান্ডিল তৈরি করবে। যাতে আপনি মোস্তকের জন্য ডিস্ট ফোল্ডারের মধ্যে সমস্ত ফাইল আপলোড করতে পারেন।
এনজি বিল্ড - প্রোড --aot --base-href।
এনজি সার্ভ বিকাশের উদ্দেশ্যে আমাদের অ্যাপ্লিকেশনটি পরিবেশন করার জন্য কাজ করে। উত্পাদন সম্পর্কে কি? আমরা যদি আমাদের প্যাকেজ.জসন ফাইলটি খতিয়ে দেখি, আমরা দেখতে পাচ্ছি যে স্ক্রিপ্টগুলি আমরা ব্যবহার করতে পারি:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build --prod",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
বিল্ড স্ক্রিপ্টটি - প্রোড পতাকা সহ কৌণিক সিএলআইয়ের এনজি বিল্ড ব্যবহার করে। আসুন এখন এটি চেষ্টা করুন। আমরা এটি দুটি উপায়ে একটি করতে পারি:
# এনপিএম স্ক্রিপ্ট ব্যবহার করে
npm run build
# সরাসরি ক্লাইটি ব্যবহার করছে
ng build --prod
এবার আমাদের পাঁচটির পরিবর্তে চারটি ফাইল দেওয়া হয়েছে। - প্রোড পতাকাটি আমাদের অ্যাপ্লিকেশনটিকে আকারে আরও ছোট করতে কৌণিককে বলে।