Webpack, VSCode 和 Babel 组件模块导入别名
很多时候我们使用别人的库,都是通过 npm install,再简单的引入,就可以使用了。
|
1
2
|
import React from 'react'
import { connect } from 'react-redux'
|
那如果我们自己写的组件库和工具 utils 类怎么办?如果你不熟悉别名的概念,通常会引入相对路径,它会变成这样。
|
1
2
3
|
import { someConstant } from './../../config/constants'
import MyComponent from './../../../components/MyComponent'
import { digitUppercase } from './../../../utils'
|
如果是频繁的引用使用,这样的引用方式的确不是很优雅。接下来就告诉你通过别名的方式可以使用绝对路径去引用本地自己写的组件和工具类。
|
1
2
3
4
5
|
import React from 'react'
import { connect } from 'react-redux'
import { someConstant } from 'config/constants'
import MyComponent from 'components/MyComponent'
import { digitUppercase } from 'utils'
|
我们需要在 Webpack, Jest, Babel 和 VSCode 对应的配置脚本中声明即可。
对于这篇文章,假设一个应用程序结构如下:
|
1
2
3
4
5
6
7
8
9
|
MyApp/
dist/
src/
config/
components/
utils/
jsconfig.json
package.json
webpack.config.js
|
Webpack 配置
不使用任何额外的插件,Webpack 允许通过配置中的 resolve.alias 属性导入别名模块。
|
1
2
3
4
5
6
7
|
module.resolve = {
alias: {
config: path.resolve(__dirname, "..", "src", "config"),
components: path.resolve(__dirname, "..", "src", "components"),
utils: path.resolve(__dirname, "..", "src", "utils"),
}
}
|
副作用:当 Webpack 知道如何处理这些别名时,VSCode 却不会,像 Intellisense 这样的工具将无法工作。
VS Code 配置
配置 jsconfig.json
首先你要在项目中创建一个 jsconfig.json(建议放在项目的根目录中)。
你可以自己新建一个 json 文件修改文件名为 jsconfig.json。或者如果你全局安装了 typescript,那么在项目根目录执行 tsc --init 即可生成一个 tsconfig.json 然后修改为 jsconfig.json即可。根据文档上说 jsconfig.json 是默认开启了 "allowJs": true 的 tsconfig.json,所以直接用 tsc --init 生成一个,这样所有配置都会带有注释说明。
更多详细配置请看 官网文档 jsconfig.json。
最后记得重启下 VS Code 使其生效。
通过告诉 VS Code 如何理解这些别名可以让它变得“更聪明”,就像在 jsconfig.json 文件中使用 exclude 属性,可以在搜索的时候排除 node_modules 或编译的文件夹(如 dist)来加快 VS Code 的全局搜索速度。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
{
"compilerOptions": {
"target": "ES6",
"jsx": "react",
"experimentalDecorators": true,
"baseUrl": ".",
"paths": {
"components/*": ["src/components/*"],
"config/*": ["src/config/*"],
"utils/*": ["src/utils/*"]
}
},
"exclude": ["node_modules, "dist""]
}
|
智能路径提示
需要安装插件Path Intellisense,并且进行配置(项目或者全局的settings.json):
|
1
2
3
4
5
|
"path-intellisense.mappings": {
"config": "${workspaceRoot}/src/config",
"component": "${workspaceRoot}/src/component",
"utils": "${workspaceRoot}/src/utils"
}
|
使用路径的就可以智能提醒路径,按住 ⌘command就可以跳转到对应代码了。
Babel 配置
babel-plugin-module-resolver 是一个 Babel 模块解析插件,在 babelrc 中可以配置模块的导入搜索路径为模块添加一个新的解析器。这个插件允许你添加新的 “根” 目录,这些目录包含你的模块。它还允许您设置一个自定义别名目录,具体的文件,甚至其他 NPM 模块。
如果你要安装它,根据以下步骤就可以了:
|
1
|
npm install --save-dev babel-plugin-module-resolver
|
安装完成以后,我们在项目的根目录下,新建一个 .babelrc 配置文件:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
const path = require('path');
module.exports = {
plugins: [
[
'module-resolver',
{
alias: {
components: path.join(__dirname, './src/components'),
},
},
],
[
'import',
{
libraryName: 'antd',
style: true, // or 'css'
},
],
],
};
|
Webpack, VSCode 和 Babel 组件模块导入别名的更多相关文章
- python成长之路【第十八篇】:python模块介绍、模块导入和重载
一.模块和命名空间 一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起.每个模块文件是一个独立完备的变量包,即一个命名空间.一个模块文件不能看到其他文件定义的变量名,除非 ...
- python模块导入细节
python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: ...
- 【转】python模块导入细节
[转]python模块导入细节 python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码 ...
- Angular问题04 模块导入错误???、BrowserModule模块重复加载???、material模块引入后报错
1 模块导入错误 1.1 问题描述 项目启动时报错:元数据错误,错误截图如下: 1.2 问题原因 利用VsCode开发angular项目时利用自动导入出现错误 坑01:VsCode 的自动导入功能比较 ...
- python之模块导入和包
一.何为模块 1.一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2.模块目的和函数,对象等一样,是为了代码的复用性而存在的.即一个py程序写了很多功能,也可 ...
- 记录一下webpack好用的node模块
postcss-loader autoprefixer: 自动添加css前缀 css-loader: 能在js文件中导入css(配合React比较好,我猜) style-loader: 将所有的计算后 ...
- Go项目结构和模块导入
Go项目结构和模块导入 golang项目结构与其他语言类似,但是仍然有一些需要注意的地方. 项目结构 环境配置 go 命令依赖一个重要的环境变量:$GOPATH,它表示GO项目的路径,如下设置 exp ...
- python 模块导入
1. 模块导入: 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 math: import math 你可以认为math就是一个指向已导 ...
- isinstance和issubclass、动态模块导入、异常处理
一.isinstance和issubclass isinstance:判断某个对象是否是某个类的实例,返回True或Flase issubclass:判断某个类是否是某个类的子类. 例如: class ...
随机推荐
- sourceTree的下载与安装
一. SourceTree是什么? 一个拥有可视化界面的项目版本控制的软件,适用于git项目管理,在window和mac均可使用. 二. SourceTree下载 下载地址:SourceTree官网 ...
- Codeforces 807 C. Success Rate
http://codeforces.com/problemset/problem/807/C C. Success Rate time limit per test 2 seconds memory ...
- CF821 D. Okabe and City 图 最短路
Link 题意:给出$n*m$大小的地图,已有$k$盏灯亮,人从左上角出发,右下角结束,期间必须走路灯点亮的地方,他可以在任意时刻消耗一枚硬币点亮一行或一列灯,他最多同时点亮一行或一列灯,要想点亮别的 ...
- CF767 C.Garland DFS
LINK 题意:给定一棵树,每个节点拥有权值,问能否找到两个点,断开它们与父节点的边能使树分成权值和相等的三部分.权值可以为负 思路:进行两遍DFS,第一遍找最深的子树和为sum/3的节点,标记掉找到 ...
- Flask---使用Bootstrap新建第一个demo
Flask---使用Bootstrap新建第一个demo 参考自http://www.jianshu.com/p/417bcbad82fb 还有<Flask web开发> 前端用到Boot ...
- 使用JavaScript实现使用鼠标画线的效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【BZOJ4870】组合数问题(计数DP,快速幂)
题意: 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 思路:From http://blog.csdn.net/qq_33229466/artic ...
- 第七周 ch04 课下测试补交
2017-2018-1 20155335 <信息安全系统设计基础>第7周 课下测试博客 本人不慎忘记去交dao'zhi 测试题目: SEQ+对SEQ的改变有() A . PC的计算挪到取指 ...
- kali2.0安装虚拟机工具
kali2.0无法安装虚拟机工具,显示VMware Tools无法用于该虚拟机,或者安装之后无法进行复制.粘贴等操作. 解决办法: step1: 更换源 root@starnight:~# vim / ...
- NYOJ 231 Apple Tree (树状数组)
题目链接 描述 There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in t ...