Gruntjs 在项目中尝试使用自定义ES6 Phaser.Plugin时,找不到模块

Gruntjs 在项目中尝试使用自定义ES6 Phaser.Plugin时,找不到模块,gruntjs,ecmascript-6,browserify,babeljs,phaser-framework,Gruntjs,Ecmascript 6,Browserify,Babeljs,Phaser Framework,我正在尝试编写一个ES6类导入程序,但在跨文件导入ES6类时遇到问题。当前设置构建良好,您可以看到输出。然而,当我尝试在实际的Phaser游戏中使用编译后的插件时 import '../plugins/phaser-dynamic-state-transition'; 我的林特发现了这个错误 Cannot find module './TransitionStateManager' from '~/src/plugins' 从这一点上,我知道它正在成功地找到内置的ES5插件,并试图将其导入到

我正在尝试编写一个ES6类导入程序,但在跨文件导入ES6类时遇到问题。当前设置构建良好,您可以看到输出。然而,当我尝试在实际的Phaser游戏中使用编译后的插件时

import '../plugins/phaser-dynamic-state-transition';
我的林特发现了这个错误

Cannot find module './TransitionStateManager' from '~/src/plugins'
从这一点上,我知道它正在成功地找到内置的ES5插件,并试图将其导入到游戏中。此外,当插件的src中只有1个文件时,它也是成功的。在游戏中添加第二个文件TransitionStateManager时会出现问题,即使它编译得很好

你知道为什么会这样吗

编辑:

您可以在GitHub repo中看到所有代码。然而,为了方便起见,这里是我的Gruntfile.js

  module.exports = function (grunt) {
   grunt.initConfig({
      pkg: grunt.file.readJSON('package.json'),

      //allow import/export of JS classes
      browserify: {
         dist: {
            options: {
               transform: [ //transform ES6 code to ES5 code
                  ["babelify", {
                     loose: "all"
                  }]
               ]
            },
            files: {
               "./dist/<%= pkg.name %>.js": ["./src/index.js"]
            }
         }
      },

      //turn the output js file into a minified file (use less kB)
      uglify: {
          dist: {
              files: {
                  "./dist/<%= pkg.name %>.min.js": ["./dist/<%= pkg.name %>.js"]
              }
          }
      },

      //define the watch task: build when you save an edit
      watch: {
         scripts: {
            files: ["./src/*.js"],
            tasks: ["build"]
         }
      }
   });

   grunt.loadNpmTasks("grunt-browserify");
   grunt.loadNpmTasks("grunt-contrib-watch");
   grunt.loadNpmTasks("grunt-contrib-uglify");

   grunt.registerTask("build", ["browserify","uglify"]);//define the modules that will run in the build task
   grunt.registerTask("default", ["build","watch"]); //build and then start watching the files for changes
};
module.exports=函数(grunt){
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
//允许导入/导出JS类
浏览:{
地区:{
选项:{
转换:[//将ES6代码转换为ES5代码
[“宝贝”{
松散:“全部”
}]
]
},
档案:{
“/dist/.js”:[“/src/index.js”]
}
}
},
//将输出js文件转换为缩小文件(使用更少的kB)
丑陋的:{
地区:{
档案:{
“/dist/.min.js”:[“/dist/.js”]
}
}
},
//定义监视任务:保存编辑时生成
观察:{
脚本:{
文件:[“/src/*.js”],
任务:[“构建”]
}
}
});
grunt.loadNpmTasks(“grunt browserify”);
grunt.loadNpmTasks(“grunt contrib watch”);
grunt.loadNpmTasks(“grunt contrib uglify”);
grunt.registerTask(“build”、[“browserify”、“uglify”]);//定义将在构建任务中运行的模块
registerTask(“default”,[“build”,“watch”]);//构建并开始查看文件的更改
};
编辑:

我运行
grunt
,源文件被捆绑并输出到一个文件中。我把那个文件复制到我游戏项目的
src/plugins
文件夹中。在我的
src
文件夹中,我有一个文件
Preload.js
,其中有一行
import'../plugins/phaser dynamic state transition'。此时,我出现了大量错误,告诉我缺少
。/TransitionStateManager'

编辑:

我目前使用的是NPM的这个,我发现如果我直接下载并尝试引用它,我会有同样的错误…即使它在NPM中运行良好

工作时间:1<代码>npm安装移相器状态转换--保存
2。通过
导入“移相器状态转换”消费

不工作:1。2.通过
import'../plugins/phaser state transition'消费

编辑:


因此,如果我在GitHub repo和我自己的repo上都使用缩小版(使用uglify插件构建),它就可以工作。不知道为什么会这样做,但非精简版不会这样做。

当以前的Browserify捆绑包(您的插件)位于当前正在Browserify(您的游戏)的依赖关系图中时,可能会发生这种情况。简而言之,Browserify无法识别上一个bundle现在是自包含的,并尝试解析其中的
require()
调用。您可以在中看到我更详细的描述

可能的解决办法是:

  • 取消之前的捆绑包(您的插件)。这也是你想要做的,如果你要分发插件

  • 缩小它,正如你所发现的

  • 执行第二个捆绑包(游戏)时使用
    noParse
    选项


另请参见。

您是否可以在问题中包括您的browserify配置?已更新。谢谢你看!您提到您正在尝试使用编译后的插件(您是指构建包吗?);你想怎么使用/消费它?@James是消耗插件的phaser游戏,它也被浏览了?通常情况下,当您尝试浏览某个包含Browserify包的内容时会发生这种情况,原因我在中解释过。缩小是一种解决方案,正如你发现的,正如我在那里和那里提到的。您可以取消对它的要求,以减少对源代码的中断(如果您要分发它,您应该这样做),或者使用源代码映射进行缩小。谢谢@JamesLowrey!我认为这里有一些规范的答案功能,所以…我应该研究一下,看看我是否可以为此创建一个,并指出所有的问题,因为它们听起来可能非常不同,但有相同的根本原因。