2016-10-03 10 views
0

Gulp 및 SystemJS-Builder를 사용하여 SFX (자체 실행 번들)로 프로젝트를 빌드하려고합니다. 내 꿀꺽 마시는 작업을 실행할 때 "창은 정의되지 않았습니다."오류가 계속 나타납니다. 문제를 조사하고 해결책을 찾지 못했습니다.SystemJS Builder - 창이 정의되지 않았습니다.

(function() { 

    window.define = System.amdDefine; 
    window.require = window.requirejs = System.amdRequire; 

    var kendoVersion = "2016.3.914"; 

    var map = { 
     text: "../Scripts/text.js", 
     app: "app.js", 
     main: "main.js", 
     aes: "../../../Scripts/aes.js", 
     jquery: "../../../Scripts/kendo/" + kendoVersion + "/jquery.min.js", 
     kendo: "vendor/kendo/kendo.js", 
     DataTables: "../../../Scripts/DataTables/datatables.js", 
     k: "../../../Scripts/kendo/" + kendoVersion + "/", 
     bootstrap: "../../../Scripts/bootstrap.js", 
     lodash: "../../../Scripts/lodash.js", 
     moment: "../../../Scripts/moment.js", 
     ajaxSetup: "security/ajaxSetup.js", 
     q: "../../../Scripts/q.js", 
     toastr: "../../../Scripts/toastr.js", 
     wizards: "viewmodels/shared", 
     'kendo.core.min': "../../../Scripts/kendo/" + kendoVersion + "/kendo.core.min.js" 
    }; 

    var paths = { 
     'kendo.*': "../../../Scripts/kendo/" + kendoVersion + "/kendo.*.js", 
     jquery: "../../../Scripts/kendo/" + kendoVersion + "/jquery.min.js", 
     bootstrap: "../../../Scripts/bootstrap.js" 
    }; 

    var meta = { 
     app: { deps: ["kendo", "jquery"] }, 
     main: { deps: ["jquery"] }, 
     jquery: { exports: ["jQuery", "$"], format: "global" }, 
     kendo: { deps: ["jquery"] }, 
     bootstrap: { deps: ["jquery"] }, 
     'kendo.core.min': { deps: ["jquery"] }, 
     DataTables: { deps: ["jquery"], exports: "$.fn.DataTable" }, 
     toastr: { deps: ["jquery"] } 
    }; 

    var packages = { 
     pages: { 
      main: 'views/*.html', 
      format: 'amd', 
      defaultExtension: 'html' 
     } 
    }; 

    var config = { 
     baseURL: "application/source", 
     defaultJSExtensions: true, 
     packages: packages, 
     map: map, 
     paths: paths, 
     meta: meta 
    }; 

    System.config(config); 
    System.import("main"); 

})(this); 

내 인덱스 페이지에 SystemJS를로드

여기 내 꿀꺽 빌드 파일 여기

var gulp = require('gulp'); 
var path = require('path'); 
var uglify = require('gulp-uglify'); 
var concat = require('gulp-concat'); 
var Builder = require('systemjs-builder'); 

gulp.task('bundle:js', function() { 
    var builder = new Builder('MyApplication/application/source', 'MyApplication/application/source/config.js'); 

    return builder.buildStatic('MyApplication/application/source/app.js', 'MyApplication/application/js/Site.min.js', { 
     format: "amd" 
    }); 
}); 

내 SystemJS 구성입니다. 저는 여기에 문제가없는 경우

window.define = System.amdDefine; 
window.require = window.requirejs = System.amdRequire; 

는 위의 코드 라인이 설정에 갈 않는 설정에서 코드 줄 믿습니다 내 Index.cshtml 페이지

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title>My Application</title> 
    <meta name="description" content=""/> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> 
    @Styles.Render("~/application/css/site.min.css") 
    <script src="@Url.Content("~/Scripts/modernizr-2.8.3.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/localStoragePolyFill.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/system.js")" type="text/javascript"></script> 
</head> 
<body> 

    @Html.AntiForgeryToken() 
    <div id="applicationHost" class="page-wrap"> 

     <!-- The application is rendered here --> 

    </div> 

    <script src="@Url.Content("~/application/source/config.js")" type="text/javascript"></script> 

</body> 
</html> 

입니까?

답변

0

구성 및 시작을 분리하여 문제를 해결했습니다. 이전에 동일한 파일에서 구성 및 시작을 수행했습니다. 구성 파일에 구성 만있는 경우 실제로 응용 프로그램을 시작하는 별도의 시작 파일이 있습니다.

Index.cshtml

@using System.Web.Optimization; 

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <title>My Application</title> 
    <meta name="description" content=""/> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> 
    @Styles.Render("~/application/css/site.min.css") 
    <script src="@Url.Content("~/Scripts/modernizr-2.8.3.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/localStoragePolyFill.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/system.js")" type="text/javascript"></script> 
</head> 
<body> 

    @Html.AntiForgeryToken() 
    <div id="applicationHost" class="page-wrap"> 

     <!-- The application is rendered here --> 

    </div> 

    <script src="@Url.Content("~/application/source/startup.js")" type="text/javascript"></script> 

</body> 
</html> 

Startup.js

// make sure we can load AMD files 
window.define = System.amdDefine; 
window.require = window.requirejs = System.amdRequire; 

// fire startup 
window.require(["application/source/config.js"], function() { 

    // start app once config is done loading 
    System.import("main"); 

}); 

config.js

System.config({ 

    baseURL: "application/source", 
    defaultJSExtensions: true, 
    packages:{ 
     pages: { 
       main: 'views/*.html', 
       format: 'amd', 
       defaultExtension: 'html' 
     } 
    }, 
    map: { 
     text: "../Scripts/text.js", 
     app: "app.js", 
     main: "main.js", 
     aes: "../../../Scripts/aes.js", 
     jquery: "../../../Scripts/kendo/2016.3.914/jquery.min.js", 
     kendo: "vendor/kendo/kendo.js", 
     DataTables: "../../../Scripts/DataTables/datatables.js", 
     k: "../../../Scripts/kendo/2016.3.914/", 
     bootstrap: "../../../Scripts/bootstrap.js", 
     lodash: "../../../Scripts/lodash.js", 
     moment: "../../../Scripts/moment.js", 
     ajaxSetup: "security/ajaxSetup.js", 
     q: "../../../Scripts/q.js", 
     toastr: "../../../Scripts/toastr.js", 
     wizards: "viewmodels/shared", 
     'kendo.core.min': "../../../Scripts/kendo/2016.3.914/kendo.core.min.js" 
    }, 
    paths: { 
     'kendo.*': "../../../Scripts/kendo/2016.3.914/kendo.*.js", 
     jquery: "../../../Scripts/kendo/2016.3.914/jquery.min.js", 
     bootstrap: "../../../Scripts/bootstrap.js" 
    }, 
    meta: { 
     app: { deps: ["kendo", "jquery"] }, 
     main: { deps: ["jquery"] }, 
     jquery: { exports: ["jQuery", "$"], format: "global" }, 
     kendo: { deps: ["jquery"] }, 
     bootstrap: { deps: ["jquery"] }, 
     'kendo.core.min': { deps: ["jquery"] }, 
     DataTables: { deps: ["jquery"], exports: "$.fn.DataTable" }, 
     toastr: { deps: ["jquery"] } 
    } 
}); 

난이 올바른 해결책이 있는지 확실하지 않다,하지만 해결 않았다 "window not defined"문제.