create-nw-react-app与antd的配合

    最近工作中需要一个问题,非常有必要总结一下,万一有碰到这个问题的同学可以参考。

    原本使用create-react-app脚手架搭建的项目突然被告知要能在浏览器中直接访问到node中的模块……(这个模块叫winax),从而中途改换create-nw-react-app这个脚手架,因其基于create-react-app同时又有nw环境,问题猜想应该能得到解决。但实际情况并非如此。

    首先是引入antd,antd的官网提供的按需加载的引入方式可以使用。为方便后面修改主题,我使用了react-app-rewired插件通过config-overrides.js的方式引入,同时使用react-app-rewire-less插件通过modifyVars修改less中的变量。

const { injectBabelPlugin } = require('react-app-rewired');

const rewireLess = require('react-app-rewire-less');

module.exports = function override(config, env) {

    config = injectBabelPlugin(

        ['import', { libraryName: 'antd', libraryDirectory: 'es', style: true }],

        config

    );

    config = rewireLess.withLoaderOptions({

        modifyVars: {

            "@primary-color": "#06c082",

            "@font-size-base": "12px"

        },

    })(config, env);

    return config;

};

这个过程中要注意的是:

1、babel-plugin-import是不会默认安装,所以你需要自己安装

2、package.json中的start脚本需要修改成react-app-rewired start

    但是react-app-rewired启动配置start.js脚本的时候,paths.js中的默认的scriptVersion是“react-scripts”,而不是能启动nw的nw-react-script,这是需要修改的一个地方

const scriptVersion = custom_scripts || 'react-scripts';

=> const scriptVersion = custom_scripts || 'nw-react-scripts';

    另一个是webpack.config.dev.js中的host地址默认是“0.0.0.0”,这样的话nw会修改成“chrome-extension://.......:3000”,显然你想访问的“http://localhost:3000”就访问不到了。那么将这个“0.0.0.0”修改成“localhost”即可

const host = process.env.HOST || '0.0.0.0';

=> const host = process.env.HOST || 'localhost';

接下来你可以在项目中新建一个js,通过node的fs模块修改上述讲到的地方,在npm start之前先运行一下这个脚本,然后再npm start,最终你才正常启动nw,看到正常的修改过主题的antd。当然关于nw的配置请参考官网。

你可能感兴趣的:(create-nw-react-app与antd的配合)