create-react-app 設置文件路徑別名


使用 eject 擴展 webpack

前言

本文基於 (“react”: “^16.13.1”) 版本
react官方腳手架默認是將webpack配置隱藏起來了,在進行配置之前需要將webpack給暴露出來。

1.輸入命令 npm run eject

image-20201212105637012

會出現一個命令提示:這是一個單向操作,確認操作后不可逆轉/返回?
輸入 y 回車
成功之后 在項目根目錄出現 config 文件夾

image-20201212123404846

2.打開 config 文件夾下的 webpack.config.js 文件

image-20201212123441804

3.進行搜索 alias ,大概在 291 行的位置

image-20201212123514811

4.參照如下格式,設置路徑別名

alias: {
    // Support React Native Web
    // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
    'react-native': 'react-native-web',
    // Allows for better profiling with ReactDevTools
    ...(isEnvProductionProfile && {
      'react-dom$': 'react-dom/profiling',
      'scheduler/tracing': 'scheduler/tracing-profiling',
    }),
    ...(modules.webpackAliases || {}),
    // 文件路徑別名
    '@': path.resolve(__dirname, '../src'),
    '@view': path.resolve(__dirname, '../src/view'),
  },

5.在項目中使用

打開 index.js ,將 import ./index.css 替換成 import '@/index.css’
注: @ 在上面已經被設置 src 文件路徑

image-20201212123618913

6.啟動項目, 無報錯,並且樣式生效

image-20201212123656695

react 不eject擴展webpack

使用 create-react-app 生成項目,不會有 webpack 的配置項,要導出 webpack,必須使用 react-script eject,但這是一個單向操作,eject 后,就無法恢復了。如果只是修改一些簡單的配置,eject 是沒有必要的。

1、使用 react-app-rewired 包替換 react-script

react-app-rewired@^2.0.0+ 版本需要搭配 customize-cra 使用

# https://www.npmjs.com/package/react-app-rewired
# https://www.npmjs.com/package/customize-cra

$ npm i react-app-rewired -D
$ npm i customize-cra -D

然后在 package.json 文件中將 script 的配置項替換成如下

"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  }

2、在項目根目錄創建 config-overrides.js

3、使用 react-app-rewired 配置 alias

# ./config-overrides.js

const { override, addWebpackAlias } = require('customize-cra')
const path = require('path')
const resolve = dir => path.join(__dirname, '.', dir)

module.exports = override(
  addWebpackAlias({
    ['@']: resolve('src')
  })
)

4、添加 react-hot-reloader

# https://www.npmjs.com/package/react-hot-loader
# https://github.com/cdharris/react-app-rewire-hot-loader

$ npm i react-hot-loader -D

$ npm i react-app-rewire-hot-loader -D

5、修改 config-overrides.js

# https://github.com/arackaf/customize-cra/issues/54
# ./config-overrides.js

const { override, addWebpackAlias } = require('customize-cra')
const path = require('path')
const resolve = dir => path.join(__dirname, '.', dir)

module.exports = override(
  addWebpackAlias({
    ['@']: resolve('src')
  }),
  (config, env) => {
    config = rewireReactHotLoader(config, env)
    return config
  }
)

6、在根組件處開啟 react-hot-reloader

# ./App.jsx

import { hot } from 'react-hot-loader/root'

...
...
...

export default process.env.NODE_ENV === 'development' ? hot(App) : App;

7、引入 antd 按需加載

+ const { override, fixBabelImports, addWebpackAlias } = require('customize-cra')
const rewireReactHotLoader = require('react-app-rewire-hot-loader')
const path = require('path')

const resolve = dir => path.join(__dirname, '.', dir)

module.exports = override(
 + fixBabelImports('import', {
 +   libraryName: 'antd',
 +   libraryDirectory: 'es',
 +   style: 'css'
 + }),
  addWebpackAlias({
    ['@']: resolve('src')
  }),
  (config, env) => {
    config = rewireReactHotLoader(config, env)
    return config
  }
)

轉自:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM