当前位置: 首页 > 知识库问答 >
问题:

react.js - 如何在Craco中配置多个项目入口?

姜运珧
2024-03-05

craco 配置多项目入口!

需求如下: 在原有的项目中增加一个单独的html页面,想构建成两个不同的项目入口文件,

如:

public    index.html    demo.htmlsrc    index.js    entry        demo.js

构建完是

build    index.html    demo.html    static        js            main.xxx.js            demo.xxx.js

但是有各自的js引用文件, 又有公共的第三方库;

craro:7.1.0
react-scripts: 5.0.1
webpack: 5.88.2

已经尝试使用customize-cra + react-app-rewire-multiple-entry 实现,并且效果符合预期

现在请教大佬们 使用craco 进行显示

共有3个答案

乐寒
2024-03-05

就按照webpack的多入口配置就行了,网上蛮多webpack配置示例的。

// craco.config.jsmodule.exports = {  webpack: {    configure: {      entry: {        main: './path/to/my/entry/file.js',        demo: './path/to/my/entry/file.js'      },    },  },};

https://craco.js.org/docs/configuration/getting-started/#conf...

蒙胤
2024-03-05
const CracoLessPlugin = require('craco-less')const HtmlWebpackPlugin = require('html-webpack-plugin')const path = require('path')module.exports = {  plugins: [    {      plugin: CracoLessPlugin,    },  ],  webpack: {    configure: (webpackConfig) => {      webpackConfig.entry = {        main: path.resolve(__dirname, './src/index.tsx'),        activetion: path.resolve(__dirname, './src/entries/demo/index.tsx'),      }      webpackConfig.output = {        ...webpackConfig.output,        filename: 'static/js/[name].[contenthash:8].js',        chunkFilename: 'static/js/[name].[contenthash:8].chunk.js',      }      webpackConfig.plugins.forEach((plugin) => {        if (plugin.constructor.name === 'HtmlWebpackPlugin') {          plugin.userOptions.excludeChunks = ['demo']        }      })      webpackConfig.plugins.push(        new HtmlWebpackPlugin({          inject: true,          template: path.resolve(__dirname, './public/demo.html'),          chunks: ['demo'],          filename: 'demo.html',        }),      )      return webpackConfig    },  },}

已解决

楮庆
2024-03-05

要在Craco中配置多个项目入口,你需要修改Webpack的配置。Craco允许你覆盖或扩展Create React App的默认Webpack配置。

以下是一个基本的步骤指南,用于在Craco中配置多个入口点:

  1. 安装Craco(如果尚未安装)

如果你还没有安装Craco,首先需要通过npm或yarn将其添加到你的项目中:

npm install @craco/craco# 或者yarn add @craco/craco
  1. 修改package.json文件

在你的项目根目录的package.json文件中,将"scripts"部分中的"start""build"命令替换为使用Craco:

"scripts": {  "start": "craco start",  "build": "craco build",  "test": "craco test",  "eject": "react-scripts eject"}
  1. 创建或修改craco.config.js文件

在你的项目根目录中,创建一个名为craco.config.js的文件(如果尚未存在)。然后,你可以在这个文件中扩展或覆盖默认的Webpack配置。

对于多个入口点,你可以这样做:

const path = require('path');module.exports = {  webpack: {    alias: {}, // 可以在这里配置别名    plugins: [], // 可以在这里添加插件    configure: {      // 提供webpack配置对象的修改      optimization: {        splitChunks: {          cacheGroups: {            vendor: {              test: /[\\/]node_modules[\\/]/,              name(module) {                // 获取模块名称。对于npm,它通常是名称@版本                const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];                // npm包名称                return `npm.${packageName.replace('@', '')}`;              },            },          },        },      },      entry: {        main: './src/index.js',        demo: './src/entry/demo.js',      },      output: {        filename: '[name].bundle.js',        path: path.resolve(__dirname, 'build'),        publicPath: '/',      },      plugins: [        // 在这里添加或覆盖插件配置      ],    },  },};

这个配置示例中,我们添加了两个入口点:maindemo,分别对应src/index.jssrc/entry/demo.js。同时,我们还配置了输出路径和文件名。

注意:确保你的HTML文件(index.htmldemo.html)中的脚本引用与构建后的文件名相匹配。

  1. 配置HTMLWebpackPlugin

如果你想为每个入口点生成一个单独的HTML文件,你还需要配置HtmlWebpackPlugin。你可以在craco.config.js中的webpack.configure对象里添加或修改这个插件的配置。

const HtmlWebpackPlugin = require('html-webpack-plugin');module.exports = {  // ... 其他配置  webpack: {    configure: {      // ... 其他配置      plugins: [        new HtmlWebpackPlugin({          template: './public/index.html',          filename: 'index.html',          chunks: ['main'], // 对应的entry名称        }),        new HtmlWebpackPlugin({          template: './public/demo.html',          filename: 'demo.html',          chunks: ['demo'], // 对应的entry名称        }),        // ... 其他插件      ],    },  },};

这个配置将为每个入口点生成一个单独的HTML文件,并包含相应的脚本引用。

请根据你的具体需求调整这些配置。这只是一个基本的指南,可能需要根据你的项目结构和需求进行进一步的调整。

 类似资料:
  • 这是一个由脚手架创建的react项目,我想给项目配置别名 于是我npm run eject暴露配置,然后进行了配置,但是好像不管用,有人知道是为什么吗? 这是原来就定义好的路径 接着在配置中使用 但是不管用 这是报错内容 这是TS配置

  • 问题内容: 用于登录的配置文件可以在类路径中找到,因此是Eclipse项目特定的,这不是我想要的。我正在使用多个Java实用程序,它们全部都驻留在一个项目中(共享类路径),并且其中一些需要使用特定的配置。 我尝试了变量替换和Joram配置器,但没有任何效果。这很可能是我的错,我有一天要解决,但是现在我需要一个简单的解决方案。 问题答案: 选项1:使用logback.configurationFil

  • 我试图将mapstruct添加到gradle spring boot项目中。这里是构建的相关部分。gradle文件: 这是我的界面: 我在两个地方收到了我的映射器接口的生成实现:首先是预期的,但我的代码没有使用:构建/生成/源/... /LogMessageMapperImpl 第二个意外但由我的代码使用:app/src/main/generated//LogMessageMapperImpl 如

  • 问题内容: 我一直在尝试使用Maven Shade插件来获取jar,但是我仍然没有成功。 这是我的项目结构: Module1(pom.xml): Module2(pom.xml): MainModule(pom.xml): 根据这段代码,我得到了2个jar文件(Module1-version.jar和Module2-version.jar)。但这不是我想要的。我希望得到1个jar文件(MainMo

  • 问题内容: 一个ReactJs教程说: 如果要使它成为真正可扩展的列表,则可以创建一个项目数组,然后将它们通过ToDoList组件传递到props中,然后渲染每个项目。现在开始吧。 如何在上面的代码中传递项目数组? 问题答案: 数据可以通过道具传递到组件。 https://facebook.github.io/react/tutorial/tutorial.html#passing-data-th

  • 我成功地安装了所有的flatter需求,包括android studio的flatter和dart插件,没有任何遗漏。我在没有选择Kotlin支持的情况下创建了一个新的颤振项目,但在创建该项目后,我得到了与Kotlin相关的问题代码 用于使用Gradle(1.2.71)构建的Kotlin版本不同于捆绑在IDE插件(1.3.50)中的版本 这就是构建。gradle文件代码: 另一个问题是在这个dir