2016-09-29 15 views
9

Chcę dołączyć plik o nazwie /assets/js/clusterfeaturelayer.js do mojego projektu, w którym używam SystemJS i WebPack i który ma następującą strukturę.WebPack + SystemJS - Jak dodać plik JavaScript?

  • /app < - kątowy kodu aplikacja
  • /node_modules < - pakiety KMP
  • /assets/js < - inne biblioteki osób trzecich, które nie są w KMP

The Plik jest zdefiniowany w stylu AMD i wygląda tak:

define([ 
    'dojo/_base/declare', 
    'dojo/_base/array', 
    'dojo/_base/lang', 
    'esri/SpatialReference', 
    'esri/geometry/Point', 
    'esri/geometry/Polygon', 
    'esri/geometry/Multipoint', 
    'esri/geometry/Extent', 
    'esri/graphic', 

], function (declare, arrayUtils, lang, SpatialReference, Point, Polygon, Multipoint, Extent, Graphic) 
{ 

}); 

Ja jestem ld jak użyć tego składnika od wewnątrz mojego kodu przez import ClusterFeatureLayer = require("ClusterFeatureLayer");

Ale nie ważne jak próbuję włączyć ten plik w moich systemjs i configs WebPACK, to po prostu nie znajdzie go:

Oto moja systemjs config :

(function(global) { 

    // map tells the System loader where to look for things. 
    var map = { 
    'app':      'app', // 'dist', 
    '@angular':     'node_modules/@angular', 
    'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', 
    'rxjs':      'node_modules/rxjs', 
    'ClusterFeatureLayer':  'assets/js' 
    }; 

    // packages tells the System loader how to load when no filename and/or no extension 
    var packages = { 
    'app':      { main: 'boot.js', defaultExtension: 'js' }, 
    'angular2-in-memory-web-api': { main: './index.js',defaultExtension:'js' }, 
    'rxjs':      { defaultExtension: 'js' }, 
    'esri':      { defaultExtension: 'js' }, 
    'ClusterFeatureLayer':  { main: 'clusterfeaturelayer.js', defaultExtension: 'js' } 
    }; 
    var ngPackageNames = [ 
    'common', 
    'compiler', 
    'core', 
    'http', 
    'platform-browser', 
    'platform-browser-dynamic', 
    'router' 
    ]; 
    // Add package entries for angular packages 
    ngPackageNames.forEach(function(pkgName) { 
    packages['@angular/'+pkgName] = { main: pkgName + '.umd.js', defaultExtension: 'js' }; 
    }); 

    var config = { 
    map: map, 
    packages: packages 
    } 
    System.config(config); 

})(this); 

i oto config WebPack:

var webpack = require("webpack"); 

module.exports = { 
    entry: { 
     main: [ 
      './app/boot.ts' // entry point for your application code 
     ], 
     vendor: [ 
      // put your third party libs here 
      "core-js", 
      "reflect-metadata", // order is important here 
      "rxjs", 
      "zone.js", 
      '@angular/core', 
      '@angular/common', 
      "@angular/compiler", 
      "@angular/core", 
      "@angular/forms", 
      "@angular/http", 
      "@angular/platform-browser", 
      "@angular/platform-browser-dynamic", 
      "@angular/router", 
      "@angular/upgrade", 
      "ng2-slim-loading-bar", 
      "ng2-toasty",    
      "ClusterFeatureLayer" 
] 
    }, 
    output: { 
     filename: './dist/[name].bundle.js', 
     publicPath: './', 
     libraryTarget: "amd" 
    }, 
    resolve: { 
     extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js'] 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.tsx?$/, 
       loader: 'ts-loader', 
       exclude: '' 
      }, 
      // css 
      { 
       test: /\.css$/, 
       loader: "style-loader!css-loader" 
      } 
     ] 
    }, 
    plugins: [ 
     new webpack.optimize.CommonsChunkPlugin({ 
      name: 'vendor', 
      minChunks: Infinity 
     }) 
    ], 
    externals: [ 
     function(context, request, callback) { 
      if (/^dojo/.test(request) || 
       /^dojox/.test(request) || 
       /^dijit/.test(request) || 
       /^esri/.test(request) 
      ) { 
       return callback(null, "amd " + request); 
      } 
      callback(); 
     } 
    ], 
    devtool: 'source-map' 
}; 
+1

Jak to może być trudne? Potrzebuję czegoś bardzo podobnego w moim projekcie :( – user66875

Odpowiedz

6

Czy masz eksportu w pliku clusterlayerfeature?

// My Module 
var myModule = { 
    myFunction: function() { 
     return "Hello!"; 
    } 
} 
module.exports = myModule; 

Jeśli nie eksportujesz swojego modułu, wszelkie odniesienia do niego będą niezdefiniowane.

+0

Jak napisał opticon - czy możesz sprawdzić plik clusterfeaturelayer.js (i ewentualnie opublikować tutaj zawartość pliku (lub co najmniej zmienne otwarcie i linie modułu.exports? W tym samym czasie jest dobry ćwicz, aby używać nazw i odniesień rozróżniających małe i wielkie litery, więc sprawdziłbym te i spójne we wszystkich używanych miejscach ... – nettutvikler

+0

Hmm nie moduł nie eksportuje - tutaj jest link do pełnego kodu: https: // github. com/odoe/esri-clusterfeaturelayer/blob/master/ClusterFeatureLayer.js Czy moduł AMD potrzebuje takiego wyciągu eksportowego? – netik

Powiązane problemy