简体   繁体   English

使用 Laravel 与 React 混合,TypeScript 和 Ant 设计

[英]Use Laravel Mix with React, TypeScript and Ant Design

I have problem with configure laravel-mix to work properly with React, Typescript, Ant Design.我在配置 laravel-mix 以与 React、Typescript、Ant Design 一起正常工作时遇到问题。 I started with React with JS without TypeScript and it worked nicely (Ant Design styles were being imported with overridden variables).我从没有 TypeScript 的 JS 开始使用 React,它运行良好(Ant Design styles 正在导入覆盖变量)。

But after adding Typescript, importing Ant Design styles stopped working.但是添加Typescript后,importing Ant Design styles就失效了。 To make it work I need to manually import antd styles file into my main style.scss file.为了让它工作,我需要手动将 antd styles 文件导入到我的主 style.scss 文件中。 But in that case, the bundle becomes huge and variables overriding doesn't work.但在那种情况下,捆绑包变得很大,变量覆盖不起作用。

webpack.mix.js: webpack.mix.js:

const mix = require('laravel-mix');
const AntdScssThemePlugin = require('antd-scss-theme-plugin');

mix.webpackConfig({
    module: {
        rules: [
            {
                test: /\.less$/,
                use: [
                    AntdScssThemePlugin.themify({
                        loader: "less-loader",
                        options: {
                            javascriptEnabled: true
                        }
                    })
                ],
            },
            {
                test: /\.tsx?$/,
                loader: "ts-loader",
                exclude: /node_modules/,
                options: {
                transpileOnly: true
                }
            }           
        ]
    },
    resolve: {
      extensions: ["*", ".js", ".jsx", ".vue", ".ts", ".tsx", ".less", ".scss", ".css"]
    },
    plugins: [
        new AntdScssThemePlugin('./resources/sass/_theme.scss') // theme customization
    ]
});

mix.setPublicPath('../public_html')
    .react('resources/js/app.js', '../public_html/js')
    .sass('resources/sass/app.scss', '../public_html/css')
    .extract(['react', 'react-dom', 'react-router-dom', 'react-redux', 'redux', 'redux-thunk', 'axios'])
    .sourceMaps(!mix.inProduction(), 'source-map')
    .version();

.babelrc: .babelrc:

{
    "presets": [
        [
            "@babel/preset-env", {
                "targets": {
                    "browsers": [ ">5%", "not op_mini all"]
                }
            }
        ], 
        "@babel/preset-react"
    ],
    "plugins": [
        "@babel/plugin-proposal-class-properties",
        ["import", {
            "libraryName": "antd",
            "libraryDirectory": "es",
            "style": true
        }]
    ]
}

Ant Design documentation describes use case with create-react-app but I need to make it work with laravel-mix. Ant 设计文档描述了使用 create-react-app 的用例,但我需要使其与 laravel-mix 一起使用。

Mayble someone struggled with similar problem.也许有人遇到过类似的问题。

Try it!试试吧!

 mix.js('resources/js/app.js', 'public/js').react().sass('resources/sass/app.scss', 'public/css').webpackConfig({ module: { rules: [{ test: /\.less$/, use: [ { loader: "less-loader", options: { lessOptions: { modifyVars: { '@primary-color': '#307839' }, javascriptEnabled: true, } } } ] }]} })

I have configure ant design for custom colors in larvel 8我在 larvel 8 中为自定义颜色配置了蚂蚁设计

versions I configured我配置的版本

"less": "^4.1.1",
"less-loader": "^10.0.1",
"antd": "^4.16.11",

Steps I followed我遵循的步骤

  • Install antd using npm i --s antd使用npm i --s antd安装npm i --s antd
  • Install less using npm i --s less less-loader使用npm i --s less less-loader安装 less
  • change your webpack.mix.js file like bellow像波纹管一样改变你的 webpack.mix.js 文件

 mix .js("resources/js/app.js", "public/js") .react() .sass("resources/sass/app.scss", "public/css") .less("resources/less/app.less", "public/css", { lessOptions: { javascriptEnabled: true, modifyVars: { "primary-color": "#0BD37E", }, }, });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM