2016-09-29 5 views
9

私のプロジェクトには/assets/js/clusterfeaturelayer.jsというファイルを含めたいと思っています。私はSystemJSとWebPackを使い、以下の構造を持っています。WebPack + SystemJS - JavaScriptファイルを追加するには?

  • /アプリ< - NPMパッケージ
  • /資産/ JSの< - - NPM
  • に含まれていない他のサードパーティのライブラリ

角度アプリコード

  • /は<をnode_modulesファイルはAMDスタイルで定義されており、次のようになります。

    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) 
    { 
    
    }); 
    

    I wou import ClusterFeatureLayer = require("ClusterFeatureLayer");

    で私のコード内からそのコンポーネントを使用するようにLDしかし、私は私のsystemjsとのWebPACKのコンフィグでこのファイルを含めるようにしようとどんなに、それはそれを見つけることができません。ここで

    は私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); 
    

    、ここでの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

    これはどうして難しいのですか?私はプロジェクトで非常に似たものが必要です:( – user66875

    答えて

    6

    はあなたclusterlayerfeatureファイルにエクスポートを持っていますか?

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

    モジュールをエクスポートしていない場合、そのモジュールへの参照は未定義です。

    +0

    opticonが書いたように、おそらくclusterfeaturelayer.jsをチェックすることができますか(そして、最終的にファイルの内容をここに(あるいは少なくとも変数のオープンとmodule.exportsの行を投稿しますか?)同時に、大文字と小文字を区別した名前と参照を使用するように練習していますので、それらもチェックして、すべての場所で一貫性を持たせてください... – nettutvikler

    +0

    うーん、モジュールにはエクスポートがありません - https:// github。 com/odoe/esri-clusterfeaturelayer/blob/master/ClusterFeatureLayer.js AMDモジュールにこのようなエクスポート文が必要ですか? – netik

    関連する問題