链接

引言

在组件开发中,业务功能和基础组件一般分开放,比如在我们的项目中,components为基础组件, container为业务组件,但是在container中调用components中的组件时,必须通过相对路径如../../components/XXXX才能找到要用的基础组件,这里 ../../在开发时其实时一种浪费。为了解决这个问题,我们引入了webpack.resolve.alias功能。

目录结构

├── package.json
├── postcss.config.js
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── template.html
├── README.md
├── src
│ ├── components
│ ├── config.ts
│ ├── container
│ ├── index.scss
│ ├── index.tsx
│ ├── README.md
│ ├── routers.tsx
│ ├── stories
│ ├── @types
│ └── utils
├── styleguide.config.js
├── tsconfig.json
├── tslint.json
├── webpack.config.js
├── webpack.doc.js
├── webpack.vendor.js
└── yarn.lock

  

 

webpack 配置

// ...
resolve: {
extensions: ['.ts', '.tsx', '.js', 'config.js', '.json'],
alias: {
'@components': path.resolve(__dirname, './src/components'),
'@container': path.resolve(__dirname, './src/container'),
'@utils': path.resolve(__dirname, './src/utils'),
'@stories': path.resolve(__dirname, './src/stories')
}
},
// ...

通过上述配置,webpack已经没问题,再将代码中所有关于调用这些components、container、utils和stories的代码进行简化,示例如下

之前

// ./src/test/index.tsx
import AjaxTest from '../../components/Ajax'

之后

// ./src/test/index.tsx
import AjaxTest from '@components/Ajax'

问题1 [tslint] Module '@components/Ajax' is not listed as dependency in package.json (no-implicit-dependencies)

因为ts项目用了tslint来规约代码,所以会报错,查看官网关于no-implicit-dependencies的说明,将tslint.json增加如下规则

{
......
"rules": {
......
"no-implicit-dependencies": ["optional", ["src"]]
} ,
......
}

问题2 "no-implicit-dependencies": ["optional", ["src"]]

一看时ts报错,肯定时编译环境有问题,查看官网关于paths的定义,paths主要用来做目录映射,shangma上面webpack解决的时打包过程中的映射,并没有解决ts编译时的映射,所以在tsconfig.json中增加一项映射信息

{
"compilerOptions": {
"baseUrl": ".",
......
"paths": {
"@components/*": ["./src/components/*"],
"@container/*": ["./src/container/*"],
"@utils/*": ["./src/utils"],
"@stories/*": ["./src/stories"]
},
......
},
......
}

一次解决React+TypeScript+Webpack 别名(alias)找不到问题的过程「转载」的更多相关文章

  1. react: typescript import images alias

    1.webpack.config.js resolve: { extensions: ["ts", "tsx", "js", "j ...

  2. React+ES6+Webpack环境配置

    转自http://www.cnblogs.com/chenziyu-blog/p/5675086.html 参考http://www.tuicool.com/articles/BrAVv2y Reac ...

  3. React+ES6+Webpack深入浅出

    React已成为前端当下最热门的前端框架之一 , 其虚拟DOM和组件化开发让前端开发更富灵活性,而Webpack凭借它异步加载和可分离打包等优秀的特性,更为React的开发提供了便利.其优秀的特性不再 ...

  4. webpack配置别名alias出现的错误匹配

    @(webpack) webpack是一款功能强大的前端构建工具,不仅仅是针对js,它也可通过各种loader来构建相关的less,html,image等各种资源,将webpack配合流程制定工具gu ...

  5. webpack配置别名alias

    在webpack.config.js中,通过设置resolve属性可以配置查找“commonJS/AMD模块”的基路径,也可以设置搜索的模块后缀名,还可以设置别名alias.设置别名可以让后续引用的地 ...

  6. IDE vscode识别webpack中alias配置路径

    引言网上看到一篇关于 ctrl+鼠标左键无法识别别名路径的问题,最后有人回复的方法只能在ts项目中可以识别 https://segmentfault.com/q/1010000011911879 最后 ...

  7. Vue之vue中的data为什么是一个函数+vue中路径别名alias设置

    问题描述 为什么在vue组件中,我们的data属性必须是一个函数,new Vue()中的data除外,因为new Vue中只有一个data属性. 原因 因为我们能抽离出来的组件,肯定是具有复用性的,它 ...

  8. 入门React和Webpack

    最近在学习React.js,之前都是直接用最原生的方式去写React代码,发现组织起来特别麻烦,之前听人说用Webpack组织React组件得心应手,就花了点时间学习了一下,收获颇丰 说说React ...

  9. 轻松入门React和Webpack

    最近在学习React.js,之前都是直接用最原生的方式去写React代码,发现组织起来特别麻烦,之前听人说用Webpack组织React组件得心应手,就花了点时间学习了一下,收获颇丰 <!-- ...

随机推荐

  1. 11.3 Android显示系统框架_最简单的surface测试程序

    APP有一个surface(界面),其有多个buffer用来存放界面数据,这些buffer是向surfaceflinger申请的: 因此我们编写的surface测试程序步骤: (1)获得surface ...

  2. 【u252】泽泽在巴西

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 泽泽帮助了英国某街道尽量减少酸雨的伤害,街道办主任非常感激他,就把他领到一扇门前,告诉他这扇门能通往好 ...

  3. swift开发网络篇 - 用户登录POST JSON and header

    版权声明:本文为博主原创文章,未经博主允许不得转载. import UIKit import Alamofire class ViewController: UIViewController { va ...

  4. DOCKER学习心得

    原文:DOCKER学习心得   前言: Docker的主要学习心得来源于<docker技术入门与实战> --2019.1.1->2019.1.5 la 着重从基础部分--实例分析-- ...

  5. minizlib

    ZLIB开源库采用的是DEFLATE压缩算法,已经不支持加密功能,实际上功能还存在于代码中,采用MINIZIP可以支持对ZIP文件的加解密. ZLIB目前最新的是1.2.7,MINIZIP最新的版本是 ...

  6. 【SPOJ QTREE】树链剖分模板

    用线段树求解,这里注意因为求的是路径最大值,注意一下细节. #include<cstdio> #include<cstring> #include<algorithm&g ...

  7. JAVA Concurrent包 中的并发集合类

    我们平时写程序需要经常用到集合类,比如ArrayList.HashMap等,但是这些集合不能够实现并发运行机制,这样在服务器上运行时就会非常的消耗资源和浪费时间,并且对这些集合进行迭代的过程中不能进行 ...

  8. 洛谷 P1709 隐藏口令Hidden Password

    ->题目链接 题解: 贪心+字符串 #include<iostream> #include<cstring> #define N 5000005 using namesp ...

  9. 【solr基础教程之九】客户端 分类: H4_SOLR/LUCENCE 2014-07-30 15:28 904人阅读 评论(0) 收藏

    一.Java Script 1.由于Solr本身可以返回Json格式的结果,而JavaScript对于处理Json数据具有天然的优势,因此使用JavaScript实现Solr客户端是一个很好的选择. ...

  10. apche commons项目简介 分类: B1_JAVA 2014-06-26 11:27 487人阅读 评论(0) 收藏

    1.apche commons项目封装了日常开发中经常使用的功能,如io, String等. http://commons.apache.org/ Apache Commons项目的由三部分组成: T ...