成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

前端常用開(kāi)發(fā)工具的路徑解析配置

開(kāi)發(fā) 開(kāi)發(fā)工具
隨著需求的迭代與功能的完善,我們的項(xiàng)目也會(huì)愈發(fā)龐大而復(fù)雜,目錄層級(jí)結(jié)構(gòu)也會(huì)不斷深化;以 React 實(shí)踐清單中討論的 React 項(xiàng)目組織方式為例,我們常會(huì)分為 components, containers, services, apis, ducks, store, i18n 等等目錄。

本文是 Webpack CheatSheet | Webpack 基礎(chǔ)與實(shí)踐清單的一部分,項(xiàng)目代碼可以參考 fe-boilerplate | 多技術(shù)棧前端項(xiàng)目模板

[[231939]]

路徑解析

隨著需求的迭代與功能的完善,我們的項(xiàng)目也會(huì)愈發(fā)龐大而復(fù)雜,目錄層級(jí)結(jié)構(gòu)也會(huì)不斷深化;以 React 實(shí)踐清單中討論的 React 項(xiàng)目組織方式為例,我們常會(huì)分為 components, containers, services, apis, ducks, store, i18n 等等目錄,如果全部以相對(duì)路徑方式引入,可能會(huì)變成這個(gè)樣子:

  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3.  
  4. import { someConstant } from './../../config/constants'
  5. import MyComponent from './../../../components/MyComponent'
  6. import { myActionCreator } from './../../../ducks/someReducer'

毫無(wú)疑問(wèn),這樣繁多的引用不可避免地會(huì)導(dǎo)致代碼之間耦合度的增加,使得更難以重構(gòu)或者優(yōu)化。在適當(dāng)?shù)啬K劃分的基礎(chǔ)上,我們希望在跨模塊引用時(shí),能夠以絕對(duì)路徑的方式,譬如:

  1. import React from 'react'
  2. import { connect } from 'react-redux'
  3. import { someConstant } from 'Config/constants'
  4. import MyComponent from 'Components/MyComponent'
  5. import { myActionCreator } from 'Ducks/someReducer'

當(dāng)然,我們并不提倡過(guò)度地使用絕對(duì)路徑引入,對(duì)于相對(duì)關(guān)系固定的組件,還是應(yīng)該優(yōu)先使用相對(duì)路徑方式引入。

Webpack

如前文介紹,Webpack 允許我們使用 resolve.alias 來(lái)自定義路徑解析:

  1. module.resolve = { 
  2.   alias: { 
  3.     Config: path.resolve(__dirname, '..''src''config'), 
  4.     Components: path.resolve(__dirname, '..''src''components'), 
  5.     Ducks: path.resolve(__dirname, '..''src''ducks'), 
  6.     Shared: path.resolve(__dirname, '..''src''shared'), 
  7.     App: path.join(__dirname, '..''src'
  8.   } 
  9. }; 

開(kāi)發(fā)工具的支持是不可避免地因素,值得高興的是 VSCode 允許我們?cè)?jsconfig.json 中配置解析規(guī)則,Auto-Import 這樣的自動(dòng)導(dǎo)入工具同樣能識(shí)別這些規(guī)則:

  1.   "compilerOptions": { 
  2.     "target""es2017"
  3.     "allowSyntheticDefaultImports"false
  4.     "baseUrl""./"
  5.     "paths": { 
  6.       "Config/*": ["src/config/*"], 
  7.       "Components/*": ["src/components/*"], 
  8.       "Ducks/*": ["src/ducks/*"], 
  9.       "Shared/*": ["src/shared/*"], 
  10.       "App/*": ["src/*"
  11.     } 
  12.   }, 
  13.   "exclude": ["node_modules""dist"

ESLint

ESLint 同樣是前端開(kāi)發(fā)不可或缺的部分,我們可以使用 eslint-import-resolver-webpack 來(lái)擴(kuò)展 eslint-import 的模塊解析,使用 npm 安裝該模塊之后進(jìn)行如下配置:

  1. --- 
  2. settings: 
  3.   import/resolver: webpack  # take all defaults 

或者指定文件名:

  1. --- 
  2. settings: 
  3.   import/resolver: 
  4.     webpack: 
  5.       config: 'webpack.dev.config.js' 
  6.       config-index: 1   # optional, take the config at index 1 

對(duì)于未使用 Webpack 的項(xiàng)目,則可以考慮使用 eslint-import-resolver-alias:

  1. // .eslintrc.js 
  2. module.exports = { 
  3.   settings: { 
  4.     'import/resolver': { 
  5.       alias: { 
  6.         map: [ 
  7.           ['babel-polyfill''babel-polyfill/dist/polyfill.min.js'], 
  8.           ['helper''./utils/helper'], 
  9.           ['material-ui/DatePicker''../custom/DatePicker'], 
  10.           ['material-ui''material-ui-ie10'
  11.         ], 
  12.         extensions: ['.ts''.js''.jsx''.json'
  13.       } 
  14.     } 
  15.   } 
  16. }; 

Jest

我們可以在 package.json 中的 jest 配置項(xiàng)中添加 moduleNameMapper 屬性:

  1. "jest": { 
  2.   "moduleNameMapper": { 
  3.     "^Config(.*)$""<rootDir>/src/config$1"
  4.     "^Components(.*)$""<rootDir>/src/components$1"
  5.     "^Ducks(.*)$""<rootDir>/src/ducks$1"
  6.     "^Shared(.*)$""<rootDir>/src/shared$1"
  7.     "^App(.*)$""<rootDir>/src$1" 

TypeScript

TypeScript 的配置類(lèi)似于 VSCode,在 tsconfig.json 的 compilerOptions 選項(xiàng)中添加如下配置:

  1.   "baseUrl""."
  2.   "paths": { 
  3.     "c-apis/*": ["src/apis/*"], 
  4.     "c-models/*": ["src/models/*"], 
  5.     "c-stores/*": ["src/stores/*"], 
  6.     "c-utils/*": ["src/shared/*"
  7.   } 

 【本文是51CTO專(zhuān)欄作者“張梓雄 ”的原創(chuàng)文章,如需轉(zhuǎn)載請(qǐng)通過(guò)51CTO與作者聯(lián)系】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2011-06-08 13:20:56

Android ARM

2020-06-24 08:24:09

Web開(kāi)發(fā)工具

2021-01-04 14:41:28

開(kāi)發(fā)前端工具

2023-04-09 14:49:57

開(kāi)發(fā)語(yǔ)言Kotlin

2020-11-19 10:05:03

Java

2021-02-05 23:23:55

Web開(kāi)發(fā)工具

2017-05-08 16:17:54

前端開(kāi)發(fā)工具

2021-10-19 09:44:22

開(kāi)發(fā)測(cè)試工具

2011-11-22 13:44:18

Web

2010-07-14 13:57:30

Perl開(kāi)發(fā)工具

2010-05-28 13:38:29

Linux開(kāi)發(fā)工具

2019-06-11 09:00:00

阿里后端開(kāi)發(fā)工具

2020-06-24 09:38:17

前端開(kāi)發(fā)工具

2011-08-25 13:58:25

LUA開(kāi)發(fā) 工具安裝

2021-04-01 14:01:13

開(kāi)發(fā)工具前端

2021-03-27 00:05:35

前端開(kāi)發(fā)工具

2021-11-15 09:00:00

Web開(kāi)發(fā)工具

2017-09-13 16:54:38

web

2010-03-15 18:39:00

Python程序員

2010-06-04 17:26:53

Linux 開(kāi)發(fā)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜视频在线免费观看 | 国产高清视频一区 | 亚洲小视频在线观看 | 亚洲成人av | 人人做人人澡人人爽欧美 | 婷婷毛片| 美女啪啪国产 | 亚洲国产黄色av | 综合天天久久 | 精品av| 国产精品视频一二三区 | 久久精品99| 99热热99| 在线视频成人 | 欧美日韩亚洲国产 | 国际精品久久 | 国产电影一区二区 | www.47久久青青 | 狠狠爱免费视频 | 国产福利视频 | 国产精品久久国产精品 | 中文字幕一区二区三区四区五区 | 美女黄18岁以下禁止观看 | av免费成人 | 免费一级黄 | 国产精品久久一区二区三区 | 午夜精品一区二区三区在线视频 | 一级片视频免费观看 | 国产视频第一页 | 国产精品亚洲综合 | 亚洲性爰 | 国产日产欧产精品精品推荐蛮挑 | 色婷婷综合久久久久中文一区二区 | 日韩中文在线视频 | 污片在线观看 | 亚洲视频一区在线观看 | 亚洲97 | 亚洲欧洲日韩 | 久久久成人免费视频 | 国产精品一区二区在线观看 | 精品久久久久久久 |