webpack配置

项目webpack的配置方式

前言

以react为例,用自主配置webpack的方式或扩展或覆盖原来,项目中的功能。例如:使用@符号,更改打包目录,跨域设置、增加less支持、px转rem、ant-design按需加载、打包压缩js和css… 配置微前端子应用等等。

如何扩展?

1、官方使用的是 yarn eject的方式,将webpack解构出来,自己配置。可是这中操作是不可逆的,慎重~

2、采用了webpack第三方扩展工具。网上的扩展工具很多,我总结了三种(项目中使用任意一种都可以)

//分别是以下三种(有些文档将扩展工具的安装环境设为 -D 开发环境,个人觉得-s好一点)
$ yarn add @craco/craco -s  

$ yarn add @rescripts/cli -s

$ yarn add react-app-rewired -s
如何使用?

三种扩展工具使用方式类似:

1、安装

2、修改package.json

3、根目录新增对应配置文件

举例如下:

@craco/craco

*安装

$ yarn add @craco/craco -s 

*修改package.json

- "start": "react-scripts start"
- "build": "react-scripts build"
- "test": "react-scripts test"
- "eject": "react-scripts eject"

+ "start": "craco start",
+ "build": "craco build",
+ "test": "craco test"

*在项目根目录下新增craco.config.js

功能1 @符号作为src文件

const path = require('path')
const pathResolve = pathUrl => path.join(__dirname, pathUrl)
module.exports = {
    webpack: {
       
        alias: {
            '@': pathResolve('src'), //@符号作为src文件
          	//实际可根据各自需求配置 示例如下
          	'@assets': pathResolve('src/assets'),
      			'@common': pathResolve('src/common'),
      			'@components': pathResolve('src/components'),
      			'@hooks': pathResolve('src/hooks'),
      			'@pages': pathResolve('src/pages'),
      			'@store': pathResolve('src/store'),
      			'@utils': pathResolve('src/utils')
        },
    }
}

更目录下创建jsconfig.json 解决检索不到webpack配置的别名的问题
提示:如果您不使用 JavaScript,则无需担心jsconfig.json.
原文链接 https://blog.csdn.net/huochai770880/article/details/125819132

{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@@/*": ["./*"],
      "@/*": ["src/*"],
      "@assets/*": ["src/assets/*"],
      "@common/*": ["src/common/*"],
      "@components/*": ["src/components/*"],
      "@hooks/*": ["src/hooks/*"],
      "@pages/*": ["src/pages/*"],
      "@store/*": ["src/store/*"],
      "@utils/*": ["src/utils/*"]
    },
    "experimentalDecorators": true
  },
  "exclude": ["node_modules", "build"]
}

功能2 配置代理

const path = require('path')
module.exports = {
    //配置代理解决跨域
    devServer: {
        port: 3009,
        proxy: {
            '/api': {
                target: 'http://114.215.183.171:5002',
                changeOrigin: true,
                pathRewrite: {
                    "^/api": "/api"
                }
            },
       }
}

功能3 build打包文件名称更改

const path = require('path')
module.exports = {
    webpack: {
        // 更改build打包文件名称为dist
        configure: (webpackConfig, { env, paths }) => {
            webpackConfig.output.path = path.resolve(__dirname, 'dist')
            paths.appBuild = path.resolve(__dirname, 'dist')
            return webpackConfig
        },
    },
}

功能4 配置微前端子应用

const path = require("path");
const addPath = (dir) => path.join(__dirname, dir);
const { name } = require("./package.json");

// const PORT = 9000;
// let HOST = "127.0.0.1";
// const publicPath = {
//   development: `http://${HOST}:${PORT}`,
//   production: `https://xxxxx/${name}`,
// };

module.exports = {
  webpack: {
    alias: {
      "@": addPath("src"),
    },
    configure: {
      output: {
        // publicPath: publicPath[process.env.NODE_ENV] + "/",
        library: `${name}-[name]`,
        libraryTarget: "umd",
        chunkLoadingGlobal: `webpackJsonp_${name}`,
      },
 
    
};
    

配置好之后,异或是和原有的配置合并或者新增,形成新的项目webpack打包配置。

react-app-rewired

安装

$ yarn add react-app-rewired -s

修改package.json

- "start": "react-scripts start"
+ "start": "react-app-rewired start"
...

删除eject解构

接着,安装customize-cra

customize-cra利用react-app-rewired的config-overrides.js文件。通过导入customize-cra函数并导出覆盖函数中包含的几个函数调用,您可以轻松修改组成create-react-app的底层配置对象(webpack、webpack-dev-server、babel等)。
原文链接:https://www.jianshu.com/p/568832790592
源码地址:https://github.com/arackaf/customize-cra

$ yarn add customize-cra

在根目录下新增config-overrides.js文件下新增如下配置

功能一:暴露方法配置微前端子应用

const {name} = require('./package')

module.exports = {
  	webpack:(config)=>{
      config.output.library = `${name}-[name]`;
      config.output.libraryTarget = 'umd';
      config.output.chunkLoadingGlobal = `webpackJsonp_${name}`;
      return config;
    }
}

功能二:使用babel-plugin-import,它是一个用于按需加载组件代码和样式的 babel 插件。

安装
$ yarn add babel-plugin-import

/* config-overrides.js */
+ const { override, fixBabelImports } = require('customize-cra');
+ module.exports = override(
+   fixBabelImports('import', {
+     libraryName: 'antd',
+     libraryDirectory: 'es',
+     style: 'css',
+   }),
+ );
这样我们在组件中就可以按需引入组件库中所需要的组件了。

补充:前端本地proxy 配置代替
开发中常见的问题就是跨域。那么我们前端惯用的方式就是给本地webpack启动的node服务设置代理。

那么具体到使用了新版的cra后,我们该怎么办呢?

很简单,在src目录下新建文件setupProxy.js(注意文件名一定要是这个名字,不要问什么,cra现在废弃了proxy对象配置的方式,将其作为单独模块。解析就是按 src/setupProxy.js这个路径)

安装http代理相关包http-proxy-middleware

$ yarn add http-proxy-middleware -D
  
//配置如下,
const proxy = require('http-proxy-middleware');
module.exports = function(app) {
  app.use(
    proxy('/api', {
      target: 'http://xx.xx.xx.xx:8000/',
      changeOrigin: true,
      pathRewrite: {'^/api': ''}
    	}
    ))
}
好了,现在你就可以愉快的访问接口了~  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值