उत्पादन के लिए एक कोणीय एप्लिकेशन को कैसे बंडल करें


353

लाइव वेब सर्वर पर उत्पादन के लिए कोणीय (संस्करण 2, 4, 6, ...) को बंडल करने की सबसे अच्छी विधि क्या है।

कृपया जवाब के भीतर कोणीय संस्करण को शामिल करें ताकि बाद में रिलीज़ होने पर हम बेहतर तरीके से ट्रैक कर सकें।


अभी के लिए (आरसी 1)। यहाँ कुछ समाधान हैं stackoverflow.com/questions/37324511/how-to-bundle-angular2-rc1-with-systemjs
Pat M


rc3 अब एक बंडल फ़ाइल संस्करण प्रदान करता है जो अनुरोधों की संख्या 300+ से लगभग 40 तक कम करता है।
Pat M

2
अरे। मैं वेबपैक से भी नफरत करता हूं और सामान्य तौर पर कदम बढ़ाता हूं। एक साधारण वेबसाइट को एक साथ फेंकने की कोशिश करने के लिए ओवरकिल की तरह। इस प्रकार मैंने इसे बनाया: github.com/schungx/angular2-bundle
स्टीफन चुंग

धन्यवाद स्टीफन। यह विक्रेताओं के हिस्से के लिए एक सरल समाधान होगा। उम्मीद है कि यह आधिकारिक तौर पर पेश किया और अद्यतन किया जा सकता है। मुझे लगता है कि आप प्रोजेक्ट की फाइलों के लिए कुछ गुल की तरह उपयोग करते हैं?
पाट एम

जवाबों:


361

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 KB, 40 KB संपीड़ित]।
  • dist/polyfill-[es-version].[hash].bundle.jsपॉलीफ़िल निर्भरता (@angular, RxJS ...) बंडल [ES5 आकार: 127 KB के लिए नया कोणीय CLI अनुप्रयोग रिक्त, 37 KB संपीड़ित]।
  • dist/index.html आपके आवेदन का प्रवेश बिंदु।
  • dist/runtime-[es-version].[hash].bundle.js वेबपैक लोडर
  • dist/style.[hash].bundle.css शैली परिभाषाएँ
  • dist/assets कोणीय सीएलआई संपत्ति विन्यास से कॉपी किए गए संसाधन

तैनाती

आप ng serve --prodएक स्थानीय HTTP सर्वर शुरू करने वाले कमांड का उपयोग करके अपने आवेदन का पूर्वावलोकन प्राप्त कर सकते हैं जैसे कि उत्पादन फाइलों के साथ आवेदन http: // localhost: 4200 का उपयोग करके सुलभ है।

उत्पादन उपयोग के लिए, आपको distअपनी पसंद के HTTP सर्वर में फ़ोल्डर से सभी फ़ाइलों को तैनात करना होगा ।


Npm install -g कोणीय-cli @ webpack: npm ERR चलाते समय मुझे त्रुटि मिली! कृपया निम्नलिखित फ़ाइल को किसी भी समर्थन अनुरोध के साथ शामिल करें: .... \ npm-debug.log। क्या आप जानते हैं कि क्या हो रहा है?
चोंग वैंग

2
@chrismarx यह अपने HTML और शैलियों के साथ सभी घटकों सहित केवल एक बंडल का उत्पादन करता है।
निकोलस हेन्नेओ

4
मेरे पास एक एप्लिकेशन था और मैं इस पद्धति का उपयोग करना चाहता था, इसलिए मैं प्रोजेक्ट फ़ोल्डर से एनजी इनिट लॉन्च करता हूं। मैंने बाकी कदम उठाए हैं लेकिन जब मैं अपने अनुप्रयोगों को तैनात करता हूं तो यह खाली लगता है। केवल एक चीज जो दिखाई देती है वह है "ऐप काम करता है!" संदेश, क्या कुछ ऐसी जगह है जहां मुझे अपनी एप्लिकेशन फ़ाइलों को सेट करना है?
मौट्रोक

2
एनजी-इनिट को कोणीय क्ली से हटा दिया गया है। github.com/angular/angular-cli/issues/5176
Pat M

2
मैंने आखिरकार इसे स्वीकृत उत्तर के रूप में चिह्नित किया। यद्यपि अन्य समाधान भी काम कर सकते हैं और यहां तक ​​कि कुछ अतिरिक्त लचीलापन भी प्रदान कर सकते हैं (मैंने सीएलआई के बिना वेबपैक का उपयोग करने के बारे में एक पोस्ट किया है)। कोणीय सीएलआई का उपयोग निश्चित रूप से वह है जो कम सिरदर्द देता है। मैंने एंगुलर सीएलआई का उपयोग करते हुए अपनी परियोजना को समाप्त कर दिया ताकि मैं एओटी का अधिक आसानी से उपयोग कर सकूं।
पैट एम

57

2.0.1 Final गल्प (टाइपस्क्रिप्ट - लक्ष्य: ES5) का उपयोग करना


एक बार स्थापित करना

  • npm install (direcory प्रोजेक्टफॉर्ड होने पर cmd में चलता है)

बंडलिंग स्टेप्स

  • npm run bundle (direcory प्रोजेक्टफॉर्ड होने पर cmd में चलता है)

    बंडल प्रोजेक्टफ़ॉर्म / बंडल / के लिए उत्पन्न होते हैं

उत्पादन

  • bundles/dependencies.bundle.js[ आकार: ~ 1 एमबी (जितना संभव हो उतना छोटा)]
    • इसमें rxjs और कोणीय निर्भरताएं हैं, न कि संपूर्ण रूपरेखाएँ
  • bundles/app.bundle.js[ आकार: आपकी परियोजना पर निर्भर करता है , मेरा ~ ०.५ एमबी है ]
    • आपकी परियोजना में शामिल है

फ़ाइल संरचना

  • प्रोजेक्टफॉल्डर / ऐप / (सभी घटक, निर्देश, टेम्पलेट, आदि)
  • projectFolder / gulpfile.js

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);
  • projetcFolder / dist-systemjs.config.js (सिर्फ systemjs.config.json के साथ अंतर दिखाया गया है)

var map = {
    'app':                        'dist/app',
  };
  • projectFolder / index.html (उत्पादन) - स्क्रिप्ट टैग का क्रम महत्वपूर्ण है। 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>
  • ProjectFolder / app / boot.ts वह जगह है जहां बूटस्ट्रैप है।

सबसे अच्छा मैं अभी तक कर सकता था :)


2
नमस्ते, gulp स्क्रिप्ट बंडलों का निर्माण कर रही है, लेकिन मैं अनिश्चित हूं कि boot.ts फ़ाइल में क्या होना चाहिए? क्या अब बंडल में सभी फाइलें नहीं हैं? क्या हम बंडल को निष्पादित करते हैं?
क्रिस्मार्क्स

2
हुह, मुझे लगता है मुझे फिर से प्रयास करने की आवश्यकता है। मैंने बिल्डर.बिल्टस्टैटिक पर स्विच करने की कोशिश की और rxjs से एक सामान्य या एमड मॉड्यूल के रूप में लोड नहीं होने के बारे में त्रुटियां प्राप्त की। मैं आपके सुझाव को एक और कोशिश करूँगा
chrismarx

1
मैं यह भी स्पष्ट नहीं कर रहा हूं कि इस सेटअप में वास्तव में बंडलों का उपयोग कैसे किया जाता है? मुझे लगता है यहाँ @chrismarx के समान ही मुद्दे चल रहे हैं। मैं बंडल बना सकता हूं, लेकिन फिर ऐसा लगता है कि सब कुछ अभी भी मेरे ट्रांसप्लड और कॉपी किए गए ऐप फ़ोल्डर (डिस्ट / ऐप पर स्थित) से लोड किया जा रहा है। यदि मैं अपने नेटवर्क पैनल में देखता हूं तो मैं देख सकता हूं कि मेरे ऐप से संबंधित फाइलें वास्तव में वहाँ से लोड की जा रही हैं (घटक, आदि), ऐप से संबंधित सब कुछ ऐप के बजाय। bundle.js। A_Singh, क्या आप अपने boot.ts को साझा कर सकते हैं? ऐसा लगता है कि मुझे यहाँ कुछ याद आ रहा है और कुछ स्पष्टीकरण पसंद आएगा।
jbgarr

1
A_Singh, मैं नहीं देखता कि कैसे मदद करता है। जब inline-templatesइसे चलाया जाता है तो यह टेम्प्लेट्स को इनलाइन करता है और फिर सभी ऐप फोल्डर और फाइल्स की एक कॉपी बनाता है dist/app। फिर dist-systemjs.config.jsआप मैप appकरते हैं dist/appकि एक फ़ोल्डर है जो मौजूद नहीं होगा यदि आप distफ़ोल्डर को रूट के रूप में उपयोग करते हैं । क्या आप distफ़ोल्डर से अपना ऐप नहीं चलाना चाहेंगे ? और अगर ऐसा है, तो आपके पास distरूट distफ़ोल्डर में एक नेस्टेड फ़ोल्डर नहीं होगा । मुझे यहां कुछ और याद आ रहा है। क्या आपको अपनी बंधी हुई फ़ाइलों का उपयोग करने के लिए सिस्टमज को बताने की जरूरत नहीं है और न ही dist/appफ़ोल्डर में पाई जाने वाली सामान्य फाइलों को ?
17

1
मैं आपके समाधान के साथ एक समस्या का सामना कर रहा हूं, बूट कुछ ऐसा है जो यहां मौजूद नहीं है, और जब मैं इसे "एप्लिकेशन" द्वारा प्रतिस्थापित करता हूं "तो आईवा एक त्रुटि" मॉड्यूल परिभाषित नहीं है "।
Lo --cR

22

वेबपैक के साथ कोणीय 2 (सीएलआई सेटअप के बिना)

1- Angular2 टीम द्वारा ट्यूटोरियल

Angular2 टीम ने वेबपैक का उपयोग करने के लिए एक ट्यूटोरियल प्रकाशित किया

मैंने एक छोटे से गिटहब सीड प्रोजेक्ट में ट्यूटोरियल से फाइलें बनाई और रखीं । तो आप वर्कफ़्लो को जल्दी आज़मा सकते हैं।

निर्देश :

  • npm स्थापित करें

  • npm शुरू । विकास के लिए। यह एक वर्चुअल "डिस्ट" फ़ोल्डर बनाएगा जो आपके स्थानीयहोस्ट पते पर लीवरेलोड किया जाएगा।

  • npm रन बिल्ड । उत्पादन के लिए। "यह एक भौतिक" डिस्टर्ब "फोल्डर वर्जन बनाएगा, जिससे वेबसर्वर को भेजा जा सके। डिस्टर्ब फोल्डर 7.8 एमबी है, लेकिन वास्तव में वेब ब्राउजर में पेज को लोड करने के लिए केवल 234KB की आवश्यकता होती है।

2 - एक वेबकिट स्टार्टर किट

यह वेबपैक स्टार्टर किट उपरोक्त ट्यूटोरियल की तुलना में कुछ अधिक परीक्षण सुविधाएँ प्रदान करता है और काफी लोकप्रिय लगता है।


नमस्ते, क्या कोणीय 2.1.0 के साथ बीज परियोजना को अद्यतन करना संभव है? ट्यूटोरियल अब कोणीय 2.1.0 का उपयोग कर रहा है। मैंने इसका पालन किया और इसे काम नहीं मिला। त्रुटि http 404 है - app.component.html नहीं ढूँढ सकता।
heq99

मैंने समस्या के बिना कोणीय 2.1.0 को अद्यतन किया। app.component.html को app.component.ts (templateUrl:'//app.component.html ') से पुकारा जाता है। आपके पास एक ही ऐप फ़ोल्डर में दोनों फाइलें हैं?
पैट एम

1
जब आप उत्पादन के लिए जाते हैं तो ट्री-शेकिंग, मिनिफिकेशन और गज़पिंग आकार को बहुत कम कर सकते हैं। यहाँ उदाहरण के साथ एक उत्कृष्ट पढ़ा जा रहा है, blog.mgechev.com/2016/06/26/…
Hamzeen Hameem

16

SystemJs बिल्डर और gulp के साथ कोणीय 2 उत्पादन वर्कफ़्लो

Angular.io में क्विक स्टार्ट ट्यूटोरियल है। मैंने इस ट्यूटोरियल को कॉपी किया और डिस्टर्ब फोल्डर के लिए सब कुछ बंडल करने के लिए कुछ सरल gulp कार्यों के साथ बढ़ाया, जिसे सर्वर पर कॉपी किया जा सकता है और उसी तरह काम कर सकता है। मैंने जेनकिस सीआई पर अच्छी तरह से काम करने के लिए सब कुछ अनुकूलित करने की कोशिश की, इसलिए नोड_मॉड्यूल्स को कैश किया जा सकता है और कॉपी करने की आवश्यकता नहीं है।

Github पर नमूना एप्लिकेशन के साथ स्रोत कोड: https://github.com/Anjmao/angular2-production-workflow

उत्पादन के लिए कदम
  1. संकलित जेएस फाइलें और डिस्टल फोल्डर को साफ करें
  2. ऐप फ़ोल्डर के अंदर टाइपस्क्रिप्ट फ़ाइलों को संकलित करें
  3. ब्राउज़र कैश रीफ़्रेश के लिए जेनरेट की गई हैश के साथ फ़ोल्डर को डिस्टर्ब करने के लिए सब कुछ बंडल करने के लिए SystemJs बंडल का उपयोग करें
  4. बंडल किए गए संस्करणों के साथ index.html लिपियों को बदलने और dist फोल्डर को कॉपी करने के लिए gulp-html- रिप्लेसमेंट का उपयोग करें
  5. संपत्ति फ़ोल्डर के अंदर सब कुछ कॉपी करें फ़ोल्डर को परेशान करने के लिए

नोड : जब आप हमेशा अपनी स्वयं की बिल्ड प्रक्रिया बना सकते हैं, लेकिन मैं कोणीय-क्ली का उपयोग करने की अत्यधिक सलाह देता हूं, क्योंकि इसमें सभी वर्कफ़्लो की आवश्यकता होती है और यह अब पूरी तरह से काम करता है। हम पहले से ही उत्पादन में इसका उपयोग कर रहे हैं और कोणीय-सीएलआई के साथ कोई समस्या नहीं है।


यह वही है जिसकी मुझे तलाश है। जीथब पर नमूना ऐप बहुत उपयोगी है। धन्यवाद
शहरयार हसन सईद

14

कोणीय CLI 1.xx (कोणीय 4.xx, 5.xx के साथ काम करता है)

यह समर्थन करता है:

  • कोणीय 2.x और 4.x
  • नवीनतम वेबपैक 2.x
  • कोणीय एओटी संकलक
  • रूटिंग (सामान्य और आलसी)
  • एससीएसएस
  • कस्टम फ़ाइल बंडल (संपत्ति)
  • अतिरिक्त विकास उपकरण (लिंटर, यूनिट और एंड-टू-एंड टेस्ट सेटअप)

प्रारंभिक व्यवस्था

एनजी नया प्रोजेक्ट-नाम - क्राउटिंग

आप --style=scssSASS .scss समर्थन के लिए जोड़ सकते हैं ।

आप --ng4कोणीय 2 के बजाय कोणीय 4 का उपयोग करने के लिए जोड़ सकते हैं ।

प्रोजेक्ट बनाने के बाद, सीएलआई स्वचालित रूप npm installसे आपके लिए चलेगा । यदि आप इसके बजाय यार्न का उपयोग करना चाहते हैं, या बस स्थापित किए बिना प्रोजेक्ट कंकाल को देखना चाहते हैं, तो यहां देखें कि यह कैसे करना है

बंडल कदम

प्रोजेक्ट फ़ोल्डर के अंदर:

एनजी बिल्ड -प्रोड

वर्तमान संस्करण में आपको --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
    मुख्य .js फ़ाइल सभी .js स्क्रिप्ट्स उत्पन्न / आयात करती है
  • ./dist/styles.<content-hash>.bundle.js
    जब आप CSS के लिए Webpack लोडर का उपयोग करते हैं, जो कि CLI तरीका है, तो वे यहाँ JS के माध्यम से लोड होते हैं

पुराने संस्करणों में इसने अपने आकार, और .mapस्रोत फ़ाइलों की जाँच के लिए gzipped संस्करण भी बनाए , लेकिन अब ऐसा नहीं हो रहा है क्योंकि लोग इन्हें हटाने के लिए कहते रहे।

अन्य फ़ाइलें

कुछ अन्य अवसरों में, आपको अन्य अवांछित फ़ाइलें / फ़ोल्डर मिल सकते हैं:

  • ./out-tsc/
    से ./src/tsconfig.jsonकीoutDir
  • ./out-tsc-e2e/
    से ./e2e/tsconfig.jsonकीoutDir
  • ./dist/ngfactory/
    AoT संकलक (बीटा 16 के रूप में CLI को फोर्क किए बिना कॉन्फ़िगर करने योग्य नहीं)

क्या मेरे ऐप से कोणीय लिबास और उनकी निर्भरता को अलग करना संभव है?
डोमिनिक पिग्नेल

सीएलआई का उपयोग नहीं करना, जो काम करने के लिए पेड़-झटकों के उद्देश्य से है। वह सभी कोणीय EcmaScript मॉड्यूल निकाल रहा है जो आपके एप्लिकेशन में उपयोग नहीं किए गए हैं। स्पीड के लिए इसे देव मोड में अक्षम करने की योजना है (वे लोड किए गए पुस्तकालयों को "डीएलएल" कहते हैं), लेकिन अंतिम परिणाम में अलग होने की कोई योजना नहीं है। यदि आप सीएलआई के बिना अपने स्वयं के वेबपैक सामान को रोल कर रहे हैं तो यह प्राप्त होना चाहिए।
Meligy

डिस्ट फ़ोल्डर का उपयोग करके मेरे ऐप को कैसे जांचें। मैं अपने वेब सर्वर में कैसे होस्ट कर सकता हूं?
राज मी

आप बस इसे सर्वर पर कॉपी करें। यह सादा स्थिर वेबसाइट है जिसे वैसे भी परोसा जा सकता है। आप मार्ग है, तो आपको पर सर्वर विन्यास अनुभाग कि चेक कोणीय तैनाती docss के लिए, हालांकि HTML फ़ाइल के लिए सभी कॉल पुनर्निर्देशित करने के लिए चाहते हो सकता है angular.io/docs/ts/latest/guide/...
Meligy

@ मैं क्या अगर मैं <content-hash>बंडलों से ठेस में हटा दें । यह नवीनतम बंडल प्राप्त करने में समस्याएं पैदा कर सकता है?
k11k2

5

आज के रूप में मैं अभी भी उत्पादन बंडल के लिए सबसे अच्छा नुस्खा के रूप में आगे के समय संकलन रसोई की किताब पाते हैं। आप इसे यहाँ पा सकते हैं: https://angular.io/docs/ts/latest/cookbook/aot-compiler.html

एंगुलर 2 के साथ मेरा अब तक का अनुभव यह है कि एओटी लगभग कोई लोडिंग समय नहीं के साथ सबसे छोटा बनाता है। और सबसे महत्वपूर्ण सवाल जैसा कि यहाँ है - आपको केवल उत्पादन के लिए कुछ फ़ाइलों को शिप करने की आवश्यकता है।

ऐसा इसलिए प्रतीत होता है क्योंकि कोणीय कंपाइलर को उत्पादन बिल्ड के साथ नहीं भेजा जाएगा क्योंकि टेम्प्लेट को "समय से आगे" संकलित किया जाता है। अपने HTML टेम्प्लेट मार्कअप को जावास्क्रिप्ट निर्देशों में तब्दील होते देखना भी बहुत अच्छा है जो कि मूल HTML में इंजीनियर को उल्टा करना बहुत कठिन होगा।

मैंने एक साधारण वीडियो बनाया है जहाँ मैं देव बनाम AoT बिल्ड में एक कोणीय 2 ऐप के लिए डाउनलोड आकार, फ़ाइलों की संख्या आदि प्रदर्शित करता हूँ - जिसे आप यहाँ देख सकते हैं:

https://youtu.be/ZoZDCgQwnmQ

आपको वीडियो में उपयोग किया गया स्रोत कोड यहां मिलेगा:

https://github.com/fintechneo/angular2-templates


3
        **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.

2

आप अपने कोणीय अनुप्रयोग githubका उपयोग करने पर तैनात कर सकते हैं कोणीय-क्लि-घपेस

इस क्लि का उपयोग करके कैसे परिनियोजित करें यह जानने के लिए लिंक देखें।

तैनात वेबसाइट को कुछ शाखा में संग्रहीत किया जाएगा github आम तौर पर

gh-पृष्ठों

उपयोग git शाखा को क्लोन कर सकता है और इसे अपने सर्वर में स्थिर वेबसाइट की तरह उपयोग कर सकता है


1

"बेस्ट" परिदृश्य पर निर्भर करता है। ऐसे समय होते हैं जब आप केवल सबसे छोटी संभव एकल बंडल की परवाह करते हैं, लेकिन बड़े एप्लिकेशन में आपको आलसी लोडिंग पर विचार करना पड़ सकता है। कुछ बिंदु पर एक बंडल के रूप में पूरे ऐप की सेवा करना अव्यावहारिक हो जाता है।

बाद के मामले में वेबपैक आमतौर पर सबसे अच्छा तरीका है क्योंकि यह कोड विभाजन का समर्थन करता है।

एक बंडल के लिए मैं रोलअप या क्लोजर कंपाइलर पर विचार करूंगा यदि आप बहादुर महसूस कर रहे हैं :-)

मैंने उन सभी कोणीय बंडलों के नमूने बनाए हैं जिन्हें मैंने कभी यहाँ इस्तेमाल किया है: http://www.syntaxsuccess.com/viewarticle/angular-production-builds

कोड यहां पाया जा सकता है: https://github.com/thelgevold/angular-2-samples

कोणीय संस्करण: 4.1.x


0

बस सेटअप कोणीय 4 वेबपैक 3 के साथ एक मिनट के भीतर आपका विकास और उत्पादन ईएनवी बंडल किसी भी मुद्दे के बिना तैयार हो जाएगा बस नीचे दिए गए गितुब डॉक का पालन करें

https://github.com/roshan3133/angular2-webpack-starter


0

कृपया वर्तमान परियोजना निर्देशिका में CLI कमांड के नीचे का प्रयास करें। यह डिस्टर्ब फोल्डर बंडल बनाएगा। इसलिए आप तैनाती के लिए डिस्टर्ब फोल्डर के भीतर सभी फाइलों को अपलोड कर सकते हैं।

ng बिल्ड --प्रोड --aot --base-href।


0

एनजी सेवा विकास प्रयोजनों के लिए हमारे आवेदन की सेवा के लिए काम करता है। उत्पादन के बारे में क्या? यदि हम अपने पैकेज.जॉन फ़ाइल में देखते हैं, तो हम देख सकते हैं कि ऐसी स्क्रिप्ट हैं जिनका हम उपयोग कर सकते हैं:

"scripts": {
  "ng": "ng",
  "start": "ng serve",
  "build": "ng build --prod",
  "test": "ng test",
  "lint": "ng lint",
  "e2e": "ng e2e"
},

बिल्ड स्क्रिप्ट एंगुलर सीएलआई के एनजी बिल्ड को --प्रोड फ्लैग के साथ उपयोग करती है। चलो अब कोशिश करते हैं। हम इसे दो तरीकों में से एक कर सकते हैं:

# npm स्क्रिप्ट का उपयोग करना

npm run build

# सीधे क्ली का उपयोग करना

ng build --prod

इस बार हमें पाँच के बजाय चार फाइलें दी गई हैं। Theprod ध्वज कोणीय हमारे आकार में हमारे आवेदन बहुत छोटा करने के लिए कहता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.