从html

时间:2019-07-10 12:26:11

标签: javascript typescript module namespaces system

我最近开始尝试TypeScript,JavaScript和Phaser3。我的TypeScript代码作为模块被编译为单个JavaScript文件(使用系统)。我使用window.onload事件来启动我的代码,只要使用命名空间,这一切都可以正常工作。在必须添加导入语句(导入第三方插件)之后,一切都中断了。之后,我从名称空间切换到模块(添加了导入/导出+删除了名称空间)。显然这也意味着我的模块包装在系统注册表块中,因此“全局”代码(window.onload部分)不会在加载时执行。 =>项目无法运行...:(

问题:如何立即启动代码? (我已经查找/尝试了几件事,但是我对web / html / javascript的了解还不足以解决我猜到的确切问题)。

您可以找到源here。 (VSCode) 它还包含一个服务器>开始调试(启动程序),浏览到localhost:1234。

代码:

index.html

<!DOCTYPE html>
<html>

<head>
    <title>Phaser3 - Hello World</title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="js/system.js"></script>
    <script type="text/javascript" src="js/phaser.js"></script>
    <script src="js/nineslice.js"></script>
    <script type="text/javascript" src="js/app.js"></script>
    <script>

    </script>
</head>

<body>
    <div id="phaser-app"></div>
</body>

</html>

Boot.ts

import { BootConfig } from "./MainScene";

//namespace HelloPhaser
//{
    window.onload = () => {
        BootConfig.runApp();
    }
//}

MainScene.ts

import { Plugin as NineSlicePlugin } from 'phaser3-nineslice'

//namespace HelloPhaser
//{
    export class BootConfig
    {
        static runApp()
        {
            var game = new Phaser.Game({
                    title: "Hello Phaser 3",
                    width: 600,
                    height: 960,
                    type: Phaser.AUTO,
                    parent: "phaser-app",
                    plugins: {
                        global: [NineSlicePlugin.DefaultCfg]
                    },
                    physics: {
                        default: "arcade",
                        arcade: {
                            gravity: {
                                y: 0
                            },
                            debug: true
                        }
                    },
                    scale: {
                        mode: Phaser.Scale.FIT,
                        autoCenter: Phaser.Scale.CENTER_BOTH
                    },
                    scene: MainScene
            });
        }
    }

    export class MainScene extends Phaser.Scene
    {
        constructor()
        {
            super({key:"MAIN", active:true})
        }

        create()
        {
            this.add.text(0, 0, "HELLO PHASER 3");
        }
    }
//}

tsconfig.json

{
  "compileOnSave": true,
  "compilerOptions": {

    "target": "es5",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
    "module": "system",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
     "outFile": "bin/js/app.js",                       /* Concatenate and emit output to single file. */
     "outDir": "bin/js",                        /* Redirect output structure to the directory. */
     "removeComments": true,                /* Do not emit comments to output. */

    "strict": true,                           /* Enable all strict type-checking options. */
     "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
  },

  "include": [
    "./src/**/*"
  ],

  "files": [
    "./tsDefinitions/nineslice.d.ts",
    "./tsDefinitions/phaser.d.ts"
  ]
}

小回顾: -使用命名空间+可以正常运行代码,而无需对nineslice插件进行必要的导入 -添加导入后,未为Boot.ts定义BootConfig。添加导出/导入后,找到了类型。但是>我的window.onload没有执行(因为它现在是一个模块。)

  

如何保持当前的“模块”设置,但启动游戏? (这意味着要执行BootConfig.runApp()中的代码)

0 个答案:

没有答案