克隆了 create-react-app 存储库并对其进行了一些修改。现在,我想使用我的更新版本在本地创建 React 项目。本质上,我想使用像 npx create-custom-react-app 这样的命令来使用我的自定义版本生成新的 React 项目。
如何设置才能使用修改后的 create-react-app 版本在本地初始化 React 项目?
我尝试使用纱线链接将我的本地版本的create-react-app链接到我的全局npx设置,但我无法让它按预期工作。 我所期待的:
我希望在将我的自定义版本与yarn链接链接后,我能够运行npx create-custom-react-app并根据我的修改版本创建新的React项目。
有多种方法可以实现您想要的目标,并且都围绕自定义 Create React App (CRA)。您可以使用自定义模板或创建整个自定义 CRA 命令来实现此目的。
此方法允许您定义具有特定依赖项、配置和文件的模板。然后,您可以将其与
create-react-app
命令一起使用,如下所示:
npx create-react-app my-app --template [template-name]
创建自定义模板的步骤:
此方法涉及将 CRA 的完全自定义实现创建为 npm 包或 GitHub 存储库。这种方法更加通用,允许您控制项目设置的各个方面,例如脚手架逻辑、默认配置和自定义依赖项。
这样您就可以使用下一个命令仅使用 github 创建整个应用程序:
npx github:your-username/your-repo-name my-react-app
您需要为该存储库创建一个 JS 脚本,接下来只是您可以执行的操作的示例:
bin/create-my-react-app.js
#!/usr/bin/env node
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const projectName = process.argv[2];
if (!projectName) {
console.error('Error: Please specify a project name.');
console.log('Usage: npx create-my-react-app <project-name>');
process.exit(1);
}
const targetDir = path.resolve(process.cwd(), projectName);
console.log('Creating project...');
fs.mkdirSync(targetDir, { recursive: true });
fs.cpSync(path.join(__dirname, '../templates/default'), targetDir, { recursive: true });
console.log('Installing dependencies...');
execSync('npm install', { cwd: targetDir, stdio: 'inherit' });
console.log(`Project created successfully! Navigate to ${projectName} and start coding.`);
package.json
{
"name": "create-my-react-app",
"version": "1.0.0",
"bin": {
"create-my-react-app": "bin/create-my-react-app.js"
}
}
使用 Node.js 构建自定义 CLI (FreeCodeCamp):
https://www.freecodecamp.org/news/how-to-build-a-cli-with-node-js/
Node.js CLI 文档:
https://nodejs.org/api/cli.html
教程:创建您自己的脚手架工具(开发者):
https://dev.to/davidepacilio/how-to-create-your-own-cli-with-node-js-4m2g
npm CLI 脚本指南:
https://docs.npmjs.com/cli/v9/configuring-npm/package-json#bin
将 GitHub Repos 与 npx 结合使用(npm 文档):
https://docs.npmjs.com/cli/v9/commands/npx