puerts-ts-loader icon indicating copy to clipboard operation
puerts-ts-loader copied to clipboard

Sample1 关于 .mts 后缀问题

Open Ander456 opened this issue 2 years ago • 3 comments

运行sample1 看到所有ts文件都是以 .mts 结尾的,我尝试修改为.ts 在不加 PUERTS_TSLOADER_DISABLE_EDITOR_FEATURE 宏定义的时候没问题 Editor运行okay; 但是 加了宏定义 就会报错,但是 如果依然使用 .mts 然后 Release TS To Resource 这时候 出来的是 .mjs 文件 这时候运行没问题 想问下 为什么

Ander456 avatar Oct 19 '23 08:10 Ander456

mts mjs不是挺好用的。。为啥要改回去 另外报错就提供报错信息,不然不知道你说啥

zombieyang avatar Oct 19 '23 09:10 zombieyang

主要的顾虑是 因为 怕其他人开发后缀命名不按这个.mts来 因为通常都是 .ts .js 下面是case的 详情

using System.Collections.Generic;
using UnityEngine;
using Puerts;
using Puerts.TSLoader;

public class TestLoader: ILoader 
{
    public bool FileExists(string specifier) 
    {
        return specifier == "test.js";
    }

    public string ReadFile(string specifier, out string debugpath)
    {
        debugpath = "test.js"; #修改了这里  之前是.mjs
        return "console.log('test Runtime')";
    }
}

public class TSLoaderExample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        var loader = new TSLoader();
        // UseRuntimeLoader在Runtime下会形成链式处理。在Editor下不生效。
        // 执行顺序是Loader加入顺序的倒序

        // 通过菜单命令可以快速把TS构建到Resources目录供DefaultLoader使用   
        loader.UseRuntimeLoader(new DefaultLoader());
        
        // Editor下打开PUERTS_TSLOADER_DISABLE_EDITOR_FEATURE可以测试runtime下的效果。
        loader.UseRuntimeLoader(new TestLoader());

        JsEnv env = new JsEnv(loader);
        env.ExecuteModule("test.ts");
        env.ExecuteModule("main.ts");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

开启宏 PUERTS_TSLOADER_DISABLE_EDITOR_FEATURE 运行 输出 test Runtime 运行报错

Exception: __puer_execute__.mjs:183: Error: [Puer002]import main.ts failed: module not found

Error: [Puer002]import main.ts failed: module not found
    at global.__puer_resolve_module_url__ (__puer_execute__.mjs:183:23)
Puerts.GenericDelegate.Func[T1,TResult] (T1 p1) (at Library/PackageCache/[email protected]/Runtime/Src/Default/JSType/GenericDelegate.cs:521)
Puerts.JsEnv.ExecuteModule (System.String specifier) (at Library/PackageCache/[email protected]/Runtime/Src/Default/JsEnv.cs:315)
TSLoaderExample.Start () (at Assets/Scripts/TSLoaderExample.cs:38)

Ander456 avatar Oct 19 '23 10:10 Ander456

总之 [Puer002] 代表FileExists返回了false

zombieyang avatar Oct 19 '23 13:10 zombieyang