Javascript 如何在我的React本机应用程序中创建脚本
我有一个本地应用程序。作为发布过程的一部分,我需要运行一个脚本,该脚本使用我的应用程序中的一些代码生成一个静态文件。具体来说,我的应用程序是一款使用预计算板的游戏,计算成本很高,因此我正在构建一个脚本,在发布阶段生成这些板,并将它们存储在本地文件中。我想在与我的应用程序相同的代码库中创建一个脚本,该脚本将导入代码库的其他部分以生成电路板。例如,我的工作树的一个子集是:Javascript 如何在我的React本机应用程序中创建脚本,javascript,node.js,reactjs,typescript,react-native,Javascript,Node.js,Reactjs,Typescript,React Native,我有一个本地应用程序。作为发布过程的一部分,我需要运行一个脚本,该脚本使用我的应用程序中的一些代码生成一个静态文件。具体来说,我的应用程序是一款使用预计算板的游戏,计算成本很高,因此我正在构建一个脚本,在发布阶段生成这些板,并将它们存储在本地文件中。我想在与我的应用程序相同的代码库中创建一个脚本,该脚本将导入代码库的其他部分以生成电路板。例如,我的工作树的一个子集是: -lib \-Helper.tsx -Solver.tsx -scripts \-GenerateBoards.js
-lib
\-Helper.tsx
-Solver.tsx
-scripts
\-GenerateBoards.js
-generated_boards.out
App.tsx
package.json
tsconfig.json
Helper.tsx
和Solver.tsx
是独立文件,没有导入GenerateBoards.js
需要导入这两个文件,并使用其自身的内部逻辑生成电路板,并将它们写入generated_boards.out
我有一个版本的GenerateBoards.js
将编写该文件,例如:
fs = require('fs');
function main() {
fs.writeFile(
'./scripts/generated_boards.out',
'Hello, World!',
function (err) {
if (err) return console.log(err);
console.log("Finished writing file.");
});
}
main();
我可以使用节点脚本\GenerateBoards.js
创建文件。下一步是导入Helper.tsx
或Solver.tsx
,但我想不出任何咒语来让它工作。我尝试了Helper=require(“../lib/Helper.tsx”)
,但这给了我一些模块未找到的错误。我曾尝试将GenerateBoards.js
转换为.tsx
文件,并从“./lib/Helper”以助手身份执行import*,但由于不允许从模块外部导入,因此出现了问题
似乎有一些关于模块或定义模块的概念我不理解。声明“任何包含顶级导入或导出的文件都被视为一个模块”,这样看来,通过将导入*作为…
,我正在创建一个模块。但是,编译器/transpiler/runner似乎提出了相反的要求。我能够通过在React原生项目的子目录中正确设置一个模块来解决这个问题
结构
index.tsx
package.json
tsconfig.json
现在,我的普通Typescript开发环境工作正常GenerateBoards.tsx
可以导入Helper.tsx
和Solver.tsx
。要运行脚本和/或向其添加依赖项,我首先将cd
放入该文件夹,然后像运行任何其他Typescript环境一样运行命令,例如:
cd scripts
npm i some_package
npx ts-node index.tsx
这很好,因为它与我的“base”package.json完全隔离,它拥有我的所有应用程序依赖项,否则这些依赖项将被我的脚本中只需要的内容所污染。您试图导入到GenerateBoards
中的确切功能是什么?目的是什么?您试图将.tsx文件导入节点似乎有点奇怪。感谢您的链接,这可能会有所帮助。我试过.mjs
,但运气不太好。坦白地说,我只是在尝试使用JS(尽管我想使用TS),因为我遇到了麻烦,让TS工作变得(似乎)复杂。也就是说,我能够使用Typescript环境自己解决这个问题,我将添加它作为我自己问题的答案。再次感谢您抽出时间与我们分享和帮助!
import { GenerateBoards } from "./GenerateBoards";
async function main() {
const generateBoards = new GenerateBoards();
await generateBoards.generate();
}
main().then(() => console.log("Complete."));
{
"module": "esnext"
}
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"jsx": "react",
"lib": ["dom", "esnext"],
"moduleResolution": "node",
"noEmit": true,
"resolveJsonModule": true,
"strict": true,
"noImplicitAny": false,
"target": "es2017"
}
}
cd scripts
npm i some_package
npx ts-node index.tsx