Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

妙用 package.json 快速 import 文件(夹) #24

Open
rccoder opened this issue Mar 11, 2017 · 15 comments
Open

妙用 package.json 快速 import 文件(夹) #24

rccoder opened this issue Mar 11, 2017 · 15 comments
Labels

Comments

@rccoder
Copy link
Owner

rccoder commented Mar 11, 2017

前言

import router from './router';

import router from '../../router';

import router from './../../../router';

如上,或许我们在项目中经常需要引入一些文件夹,入后在路径上就会出现好多的 ../../,并且一旦换个文件夹,都得重新检出 import 是否正确

一劳永逸

目录机构

├── component
├── ....
└── router
    └── index.js

黑魔法

router 文件夹中 touch package.json,然后写入:

{
  "name": "@router"
}

这样,你在项目中的任何一个文件中都可以这样 import

import router from '@router'

结语

妈妈再也不用担心复杂的路径问题啦

其他项目

这种写法目测只在 RN 中支持,其他项目曲线救国:

babel-plugin-webpack-alias

@rccoder rccoder added the Deving label Mar 11, 2017
@xwzpp
Copy link

xwzpp commented Mar 12, 2017

@codezyc
Copy link

codezyc commented Mar 12, 2017

👍

@Rukeith
Copy link

Rukeith commented Mar 12, 2017

有點看不懂@@
所以是在 router 的裡面加 package.json
內容是
{ "name": "@router" }

如果 router 裡面有 index.js
就可以用以下方式導入嗎?
import index from '@router/index.js'

@rccoder
Copy link
Owner Author

rccoder commented Mar 12, 2017

@Rukeith

是的,在目录文件夹下写 package.json

我直接 from '@router' 等于 from '../router',也等于 from '../router/index.js

@jjeejj
Copy link

jjeejj commented Mar 12, 2017

没有看明白,是不是说目录文件下面的package.json文件中的name字段相当于这个文件夹的唯一标识,当项目启动时会找所有的 package.json文件,然后去匹配??

@lzghades
Copy link

试了一下好像不行哈,需要什么特殊处理么

@luokailuo
Copy link

@lzghades 一样不行。不太明白,router 目录下添加 package.json 文件是把 router 目录当作 module?

@rccoder
Copy link
Owner Author

rccoder commented Mar 13, 2017

@lzghades @Huzzbuzz 抱歉,我只在 React Native 项目中试验过 😂

刚才试了下普通项目中好像真的不行 😶

@rccoder
Copy link
Owner Author

rccoder commented Mar 17, 2017

其他项目曲线救国:

babel-plugin-webpack-alias

@zwhu
Copy link

zwhu commented Apr 9, 2017

如果用 webpack 的话,直接 alias 就可以了

@rccoder
Copy link
Owner Author

rccoder commented Apr 9, 2017

@zwhu yep

@syanbo
Copy link

syanbo commented Aug 24, 2017

@rccoder 使用这样的方法之后 WebStorm 无法跳进代码

@rccoder
Copy link
Owner Author

rccoder commented Aug 24, 2017

@DBshaoYan 这确实是一个问题,如果是单纯的针对 Webpack 的 alias 的话可以使用 resource root 的方式,但依旧不完美,期待以后的版本能解决这个问题吧

https://stackoverflow.com/questions/34943631/path-aliases-for-imports-in-webstorm#37135031

@EthanLin-TWer
Copy link

EthanLin-TWer commented Oct 8, 2018

过了这么久,不知道相关问题是不是有更新。分享一下我的方案。

import 一堆相对路径虽然难看,但是我用的 WebStorm 它是支持自动导入的(在使用 named export 时效果最佳),直接都不用手写,重构的时候也支持一键重命名。于是,在「重度依赖 IDE 进行管理」这个上下文中,手动 import 和手动改路径的场景都不存在了,通过 package.json alias 可能存在的方法跳不进等问题也不存在。前提是团队项目都偏向用 named export 啦,default export IDE 有时还是无力的(伟大的 Angular 永垂不朽!也祝 React 永远健康~)。

本来嘛,路径这种 trivial 的事情交给 IDE 就好了,开发者可以关注更重要的事情。

@zhongdeming428
Copy link

如果用 webpack 的话,直接 alias 就可以了

正解

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests