有什么处理引用路径比较好的方法?每次 require('../../../utilities/string') 这样都得想好久
发布于 9 年前 作者 imWildCat 6560 次浏览 最后一次编辑是 8 年前 来自 问答

react-native 似乎用了类似 @providesModule NavigationContainer 这样的方法来注册全局 module,但是好像需要预编译(貌似 watchman)支持? package.json 能否把项目中某个 js 文件注册为一个 module?

12 回复
  1. 建议把公用的东西单独建个project, 然后install到node_modules里, 本地可以直接用npm link 测试
  2. 或者可以在node_modules里建个link直接指向到你的utilities文件夹

然后就可以直接类似 require('app/utilities')

楼上 +1

scripts: {
  "postinstall": "cd node_modules; ln -sf ../app"
}

另外

不必吝惜全局变量的使用,定义一个 PROJECT_ROOT全局变量又何妨。

require(PROJECT_HOME + '/utilities/xxx')

react-native 的 @providersModule 其实是flow提供的,flow可以通过bable的一个plugin来transpile, flow基本上是个es6+es7+type,或者说是typescript - interface - annotation-… 关于引入太多的问题,我现在的解决办法是:创建一个文件把所有的引入都放进去并export出来,然后在你需要使用的地方可以就引入一个文件就可以了,举例:

// ./shared/imports.js
export {db} from '../../db.js';
export {validator, isRequired} from '../../validator.js';
export {render} from '../../render';

// ./source.js
import {db, validator, isRequired, render} from './shared/import'

@JasonBoy windows也可以?

实名反对楼上所有回答(是不是很知乎范儿? 这种需要想好久的问题你需要通过工具解决想好久的问题,而不是去改变想出来的结果来达到不去想的目的。

你可以在自己的工程目录中建立一个node_modules文件夹, node require 的规则是 当直接require 一个模块名的时候,他会向上找 到node_modules 文件夹,直到找到一个,在此文件夹中寻找依赖

@rwing 不确定,应该也有类似的东西

我也嫌弃require里面的…太多了很丑

@jiangzhuo 是的 但是有啥更更好的解决办法??

前端项目可以配置Webpack/resolve/alias来配置,Nodejs项目可以Hook住require(https://www.npmjs.com/package/require-hook )。当然,这样做会失去智能提示,编辑器 / IDE也要手动改改。

@rwing交给IDE IDE 可以自动补全,IDE可以根据完整地址查找引用生成编码时的提示等等

回到顶部