Tengo un módulo TypeScript que usa el código Lua de un archivo .lua externo para hacer algo de magia con el adaptador. Incluyo este código Lua en cadena en el JavaScript y luego uso el paquete 'lua-in-js' para ejecutarlo. Uso el módulo 'fs' para leer el archivo con fs.readFileSync y luego encadeno el resultado de esta manera. (Consulte module.ts a continuación).
const luaCode = fs.readFileSync('./adapter.lua').toString()Sin embargo, el desafío es que este módulo TypeScript se usa en React Native, donde el paquete 'fs' no es compatible. Uso 'tsc' para compilar el paquete de módulos, pero en el código compilado, el módulo 'fs' está incluido y se usa como una dependencia. (Consulte bundle.js a continuación).
const fs_1 = require("fs"); const luaCode = (0, fs_1.readFileSync)('./adapter.lua').toString(); Al intentar ejecutar el código, falla porque 'fs' no es compatible con RN. Por lo tanto, el código Lua debería incluirse en el archivo del paquete en su totalidad dentro de la variable de cadena luaCode . ¿Cómo puedo conseguir esto? A continuación también se muestra mi tsconfig.json como referencia.
{ "compilerOptions": { "target": "ES2015", "module": "commonjs", "declaration": true, "outDir": "lib", "strict": true, "removeComments": true, "skipLibCheck": true, "isolatedModules": true }, "include": [ "src/**/*" ] }Encontré la solución finalmente por mí mismo. Cambié el proceso de compilación para usar Babel, dejando 'tsc' para generar solo declaraciones de tipos. (Consulte el script de compilación en package.json a continuación).
"build": "babel src --out-dir lib --extensions .ts && tsc", Instalé el complemento de Babel 'babel-plugin-inline-import' y 'babel-plugin-module-resolver', de los cuales el primero condujo al resultado que quería. Para compilar usé el preset '@babel/preset-typescript'. (Consulte babel.config.js continuación).
module.exports = { presets: ['@babel/preset-typescript'], plugins: [ [ 'babel-plugin-inline-import', { extensions: ['.lua'] } ] ], env: { test: { plugins: ['@babel/plugin-transform-modules-commonjs'] } } }; A continuación también se muestra mi tsconfig.json actualizado como referencia.
{ "compilerOptions": { "target": "ES2015", "module": "commonjs", "declaration": true, "outDir": "lib", "strict": true, "removeComments": true, "skipLibCheck": true, "emitDeclarationOnly": true, "isolatedModules": true, "moduleResolution": "node", }, "include": [ "src/**/*" ] }Después de configurarlos, simplemente podía importar el archivo Lua en el módulo TypeScript y usarlo en 'lua-in-js'.
import luaAdapter from './adapter.lua';