如何在 JavaScript 模块包中内联包含字符串化的依赖项?
2022-2-22 9:40:50
收藏:0
 阅读:1475
 评论:1
我有一个 TypeScript 模块,它使用外部的 .lua 文件中的 Lua 代码来执行适配器魔法。我将这个 Lua 代码字符串化后包含在 JavaScript 中,然后使用 'lua-in-js' 包来执行它。我使用 'fs' 模块来读取文件,然后像下面这样将结果字符串化。(请参阅下面的 module.ts。)
const luaCode = fs.readFileSync('./adapter.lua').toString()
然而,挑战在于这个 TypeScript 模块被用在 React Native 中,其中不支持 'fs' 包。我使用 'tsc' 来编译模块包,在编译后的代码中,'fs' 模块被包含并作为依赖项使用。 (请参阅下面的 bundle.js。)
const fs_1 = require("fs");
const luaCode = (0, fs_1.readFileSync)('./adapter.lua').toString();
当尝试运行代码时,它会崩溃,因为 RN 不支持 'fs'。因此,Lua 代码必须被完全包含在包文件中,放在字符串变量 luaCode 中。我该如何实现这个?下面也是我用作参考的 tsconfig.json。
{
  "compilerOptions": {
    "target": "ES2015",
    "module": "commonjs",
    "declaration": true,
    "outDir": "lib",
    "strict": true,
    "removeComments": true,
    "skipLibCheck": true,
    "isolatedModules": true
  },
    "include": [
    "src/**/*"
  ]
}
点赞
 
                评论区的留言会收到邮件通知哦~
            
  
                推荐文章
            
 - 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
 - 如何在roblox studio中1:1导入真实世界的地形?
 - 求解,lua_resume的第二次调用继续执行协程问题。
 - 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
 - SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
 - Lua实现网站后台开发
 - LUA错误显式返回,社区常见的规约是怎么样的
 - lua5.3下载库失败
 - 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
 - lua lanes多线程使用
 - 一个kv数据库
 - openresty 有没有比较轻量的 docker 镜像
 - 想问一下,有大佬用过luacurl吗
 - 在Lua执行过程中使用Load函数出现问题
 - 为什么 neovim 里没有显示一些特殊字符?
 - Lua比较两个表的值(不考虑键的顺序)
 - 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
 - 如何在 Visual Studio 2022 中运行 Lua 代码?
 - addEventListener 返回 nil Lua
 - Lua中获取用户配置主目录的跨平台方法
 
最终我自己找到了解决办法。我改变了构建过程,使用了 Babel,仅让 'tsc' 生成类型声明。(请参见下面的
package.json中的构建脚本。)"build": "babel src --out-dir lib --extensions .ts && tsc",我安装了 Babel 插件“babel-plugin-inline-import”和“babel-plugin-module-resolver”,其中前者导致了我想要的结果。编译时我使用了预设的“@babel/preset-typescript”。(请参见下面的
babel.config.js。)module.exports = { presets: ['@babel/preset-typescript'], plugins: [ [ 'babel-plugin-inline-import', { extensions: ['.lua'] } ] ], env: { test: { plugins: ['@babel/plugin-transform-modules-commonjs'] } } };下面是我更新后的
tsconfig.json供参考。{ "compilerOptions": { "target": "ES2015", "module": "commonjs", "declaration": true, "outDir": "lib", "strict": true, "removeComments": true, "skipLibCheck": true, "emitDeclarationOnly": true, "isolatedModules": true, "moduleResolution": "node", }, "include": [ "src/**/*" ] }配置完成后,我可以在 TypeScript 模块中简单地导入 Lua 文件并在 'lua-in-js' 中使用它。
import luaAdapter from './adapter.lua';