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 进行显示
就按照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...
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 }, },}
已解决
要在Craco中配置多个项目入口,你需要修改Webpack的配置。Craco允许你覆盖或扩展Create React App的默认Webpack配置。
以下是一个基本的步骤指南,用于在Craco中配置多个入口点:
如果你还没有安装Craco,首先需要通过npm或yarn将其添加到你的项目中:
npm install @craco/craco# 或者yarn add @craco/craco
package.json
文件:在你的项目根目录的package.json
文件中,将"scripts"
部分中的"start"
和"build"
命令替换为使用Craco:
"scripts": { "start": "craco start", "build": "craco build", "test": "craco test", "eject": "react-scripts eject"}
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: [ // 在这里添加或覆盖插件配置 ], }, },};
这个配置示例中,我们添加了两个入口点:main
和demo
,分别对应src/index.js
和src/entry/demo.js
。同时,我们还配置了输出路径和文件名。
注意:确保你的HTML文件(index.html
和demo.html
)中的脚本引用与构建后的文件名相匹配。
如果你想为每个入口点生成一个单独的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