2016-07-05 12 views
5

मैं सिस्टमजेएस के साथ कोणीय 2 का उपयोग कर रहा हूं जो विकास के दौरान काफी अच्छा काम करता है। अब मैं गल्प का उपयोग कर अपना पहला संकलित संस्करण तैनात करना चाहता था।कोणीय 2, गुलप, सिस्टमजेएस -> डिफ़ॉल्ट एक्सटेंशन के साथ समस्या

स्पष्ट करने के लिए, मैं निम्नलिखित systemJS फ़ाइल का उपयोग करें:

(function(global) { 

    // map tells the System loader where to look for things 
    var map = { 
    'app':       'app', // 'dist', 
    'rxjs':      'lib/node_modules/rxjs', 
    'angular2-in-memory-web-api': 'lib/node_modules/angular2-in-memory-web-api', 
    '@angular':     'lib/node_modules/@angular', 
    'ng2-charts/bundles':   'lib/node_modules/ng2-charts/bundles', 
    'ng2-charts/components':  'lib/node_modules/ng2-charts/components', 
    'ng2-cookies':    'lib/node_modules/ng2-cookies/' 
    }; 

    // packages tells the System loader how to load when no filename and/or no extension 
    var packages = { 
    'app':       { format: 'register', defaultExtension: 'js' }, 
    'rxjs':      { defaultExtension: 'js' }, 
    'angular2-in-memory-web-api': { defaultExtension: 'js' } 
    }; 

    var packageNames = [ 
    '@angular/common', 
    '@angular/compiler', 
    '@angular/core', 
    '@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 = { 
    baseURL: "/", 
    defaultJSExtension : true, 
    map: map, 
    packages: packages 
    } 

    // filterSystemConfig - index.html's chance to modify config before we register it. 
    if (global.filterSystemConfig) { global.filterSystemConfig(config); } 

    System.config(config); 

})(this); 

और निम्नलिखित gulpfile:

const gulp = require('gulp'); 
const del = require('del'); 
const typescript = require('gulp-typescript'); 
const tscConfig = require('./tsconfig.json'); 
const tsconfig = require('tsconfig-glob'); 
const sourcemaps = require('gulp-sourcemaps'); 

// clean the contents of the distribution directory 
gulp.task('clean', function() { 
    return del('dist/**/*'); 
}); 

// TypeScript compile 
gulp.task('compile', ['clean'], function() { 
    return gulp 
    .src(tscConfig.files) 
    .pipe(sourcemaps.init())   // <--- sourcemaps 
    .pipe(typescript(tscConfig.compilerOptions)) 
    .pipe(sourcemaps.write('.'))  // <--- sourcemaps 
    .pipe(gulp.dest('dist')); 
}); 

// copy dependencies 
gulp.task('copy:libs', ['clean'], function() { 
    return gulp.src([ 
     'node_modules/angular2/bundles/angular2-polyfills.js', 
     'node_modules/systemjs/dist/system.src.js', 
     'node_modules/rxjs/bundles/Rx.js', 
     'node_modules/angular2/bundles/angular2.dev.js', 
     'node_modules/angular2/bundles/router.dev.js', 
     'node_modules/chart.js/dist/Chart.bundle.min.js', 
     'node_modules/es6-shim/es6-shim.min.js', 
     'node_modules/zone.js/dist/zone.js', 
     'node_modules/reflect-metadata/Reflect.js', 
     'node_modules/systemjs/dist/system.src.js', 
     'TcAdsWebService.js' 
    ]) 
    .pipe(gulp.dest('dist/lib')) 
}); 

gulp.task('copy:modules',['clean'],function() { 
    return gulp.src([ 
    './node_modules/@angular/**/*', 
    './node_modules/rxjs/**/**', 
    './node_modules/angular2-in-memory-web-api/**/*', 
    './node_modules/ng2-charts/**/*', 
    './node_modules/ng2-cookies/**/*' 
    ],{base:'./'}).pipe(gulp.dest('dist/lib')); 
}); 

gulp.task('copy:pics',['clean'], function() { 
    return gulp.src(['pics/**/*'],{base:'./'}).pipe(gulp.dest('dist/css')); 
}) 

gulp.task('copy:css',['clean'],function() { 
    return gulp.src(['css/**/*'],{base:'./'}).pipe(gulp.dest('dist/css')); 
}); 

gulp.task('copy:js',['clean'],function() { 
    return gulp.src(['js/**/*'],{base:'./'}).pipe(gulp.dest('dist/js')); 
}); 


gulp.task('copy:systemJS',['clean'],function() { 
    return gulp.src(['systemjs.config.js']).pipe(gulp.dest('dist')); 
}); 


// copy static assets - i.e. non TypeScript compiled source 
gulp.task('copy:assets', ['clean'], function() { 
    return gulp.src(['app/**/*', 'index.html', 'styles.css', '!app/**/*.ts'], { base : './' }) 
    .pipe(gulp.dest('dist')) 
}); 

gulp.task('tsconfig-glob', function() { 
    return tsconfig({ 
    configPath: '.', 
    indent: 2 
    }); 
}); 

gulp.task('build', ['tsconfig-glob','compile', 'copy:pics', 'copy:js', 'copy:css', 'copy:systemJS','copy:modules','copy:libs', 'copy:assets']); 
gulp.task('default', ['build']); 

angular2 एप्लिकेशन बनाने और ब्राउज़र मैं में निम्न त्रुटि प्राप्त में यह लोड करने के बाद कंसोल:

Unable to load script http://localhost:81/app/app.component 

जो इंगित करता है कि यह टी से एक्सटेंशन को याद नहीं कर रहा है। उन्होंने फाइल संकलित की। मैं काफी आश्वस्त हूं कि

'app':       { format: 'register', defaultExtension: 'js' }, 

संकलक एप्लिकेशन फ़ोल्डर में .js विस्तार मन में वास्तव में से किया जा सकेगा, लेकिन यह नहीं करता है। यह मेरा पहला कोणीय 2 प्रोजेक्ट है और मेरा पहला गल्प संकलन है और मुझे पूरा यकीन है कि मुझे इसका कुछ बुनियादी पहलू याद आ रहा है लेकिन मुझे इसे मेरे कोड में नहीं मिला है।

उत्तर

4

अपने सेटअप को देखते हुए, आपको उत्पादन के लिए अपने ऐप को बंडल करने के लिए systemjs-builder का उपयोग करना चाहिए। यह आपके SystemJS कॉन्फ़िगरेशन को स्वीकार करता है ताकि आगे कॉन्फ़िगरेशन आवश्यक न हो। यह आपके मॉड्यूल को एक फ़ाइल में बंडल करता है, मिनीफाई, मैंगल इत्यादि के विकल्प के साथ

यह चीजें "ईएस 6 मॉड्यूल" तरीके से कर रहा है, जो हमारे मॉड्यूल लोडर के प्रतिलिपि/पेस्टिंग मॉड्यूल की बजाय बेहतर उपयोग कर रहा है जैसे हम करेंगे एक पारंपरिक जावास्क्रिप्ट ऐप (एसएस 5)।

ऐसा करने से, हम इंडेक्स पेज से डायनामिक लोडिंग ले सकते हैं और बंडल पर इंगित एक स्क्रिप्ट टैग का उपयोग कर सकते हैं, इसे लोड समय को तेज रूप से तेज करना चाहिए और उपयोगकर्ता को अपने पृष्ठ को लोड करने के लिए डाउनलोड करना होगा। Node_modules की प्रतिलिपि की आवश्यकता नहीं होनी चाहिए।

src 
|-- app 
| |-- main.ts 
| |-- index.html 
| |-- bundle.min.js 
|-- system.config.js 
|-- node_modules 
|-- tsconfig.json 

तुम भी एक घूँट कार्य के साथ यह सब कर सकते हैं:

एक फ़ोल्डर संरचना को देखते हुए।

कार्य: (yargs की आवश्यकता है):

var SystemBuilder = require('systemjs-builder'); 
var argv = require('yargs').argv; 
var builder = new SystemBuilder(); 

gulp.task('bundle', function() { 
    builder.loadConfig('./system.config.js') 
     .then(function() { 
      var outputFile = argv.prod ? './src/app/bundle.min.js' : './src/app/bundle.js'; 
      return builder.buildStatic('app', outputFile, { 
       minify: argv.prod, 
       mangle: argv.prod, 
       rollup: argv.prod 
      }); 
     }) 
     .then(function() { 
      console.log('bundle built successfully!'); 
     }); 
}); 

भागो इस कार्य:

gulp bundle 

या

gulp bundle --prod 

index.html:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
    <base href="/" /> 
    <title>Your App</title> 

    <link rel="stylesheet" href='styles/bootstrap.min.css' /> 
    <script src="/bundle.js"></script> 
</head> 

<body> 
    <your-root-component> 
    </your-root-component> 
</body> 

</html> 

system.config।js:

(function (global) { 

    var config = { 
    compiler: "typescript", 
    map: { 
     'jquery': 'node_modules/jquery/dist', 
     'bootstrap': 'node_modules/bootstrap/dist/js', 
     "reflect-metadata": "node_modules/reflect-metadata", 
     "zone": "node_modules/zone.js/dist", 
     "crypto": "node_modules/crypto", 
     'rxjs': 'node_modules/rxjs', 
     'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', 
     '@angular': 'node_modules/@angular', 
     'moment': 'node_modules/moment', 
     'angular2-moment': 'node_modules/angular2-moment', 
     'app': 'src/app', 
    }, 
    meta: { 
     'node_modules/bootstrap/dist/js/bootstrap.js': { 
     format: 'global', 
     deps: ['jquery'] 
     } 
    }, 
    packages: { 
     'jquery': { main: 'jquery.js', defaultExtension: 'js' }, 
     'bootstrap': { main: 'bootstrap.js', defaultExtension: 'js' }, 
     'zone': { main: 'zone.js', defaultExtension: 'js' }, 
     'reflect-metadata': { main: 'Reflect.js', defaultExtension: 'js' }, 
     'crypto': { main: 'sha1.js', defaultExtension: 'js' }, 
     'rxjs': { main: 'Rx.js', defaultExtension: 'js' }, 
     'moment':{main: 'moment.js', defaultExtension: 'js'}, 
     'angular2-moment': { main: 'index.js', defaultExtension: 'js' }, 
     'app': { main: 'main.js', defaultExtension: 'js' }, 

     '@angular/common': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/compiler': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/core': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/http': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/platform-browser': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/platform-browser-dynamic': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/router': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/testing': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/upgrade': { main: 'index.js', defaultExtension: 'js' }, 
     '@angular/forms': { main: 'index.js', defaultExtension: 'js' }, 
    } 
    } 

    System.config(config); 

})(this); 
है, उन सभी के साथ

ने कहा: मेरा मानना ​​है कि अपने संकुल अनुभाग:

var packages = { 
    'app':       { format: 'register', defaultExtension: 'js' }, 
    'rxjs':      { defaultExtension: 'js' }, 
    'angular2-in-memory-web-api': { defaultExtension: 'js' } 
    }; 

होना चाहिए:

var packages = { 
    'app':       { main: 'main.js', defaultExtension: 'js' }, 
    'rxjs':      { main: 'Rx.js', defaultExtension: 'js' }, 
    'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' } 
    }; 

main.js किया जा रहा है जो कुछ भी फ़ाइल angular2 के लिए अपने बूटस्ट्रैप समारोह में शामिल ।

+0

वाह धन्यवाद! उस जवाब ने बहुत मदद की। मुझे यह मिल गया और आधे घंटे के साथ चल रहा है (मैंने सभी लापता पैकेजों को स्थापित और अपडेट करने के बाद :-))। –

+0

खुशी हुई यह मदद की। ईएस 6 मॉड्यूल बहुत सारे देवताओं के लिए एक बड़ा कदम है। यह बहुत ही बढ़िया है कि इसे कम करने के लिए आपको केवल आधा घंटा लगा, मैं यह नहीं कहूंगा कि यह सब कुछ पता लगाने में मुझे कितना समय लगता है ... :) –

संबंधित मुद्दे