引文

在项目中,经常会有一堆配置文件,然后在其它文件里面引用的时候,如果层级比较多的时候,会出现路径很长的情况,例如在项目中有一个文件 /a/b/c/index.js

js
const config = require('../../../config')

doSomething(config.someConfig)

就会出现很长的路径名。如果移动一下文件,那么就会涉及到 多个 文件的更改,而且每次引入 config,都会出现这么长的路径,比较容易出错。那么有没有一种优雅的方式来引入项目的 config 文件呢?

优雅的引入 config

之前查看 npm 的一些问题的时候,偶然看到过,可以把本地文件夹当成 package 使用,如果可以这样的话,引入 config 就像这样

js
const config = require('config')

这样就很简单了,完全不需要知道 config 文件存放在哪个地方,只需要用就可以了。

怎么能够实现这样呢?

创建一个项目,目录类似下面这样

/config
  index.js
  package.json
index.js
package.json

配置 config

配置里面的东西就放在 config/index.js ,例如

js
module.exports = {
  A:1,
  B:2,
  C:3,
}

config/package.json 中定义这个 module

json
{
  "name": "config",
  "version": "1.0.0",
  "main": "index.js",
}

安装 config

然后在 root 目录下运行 yarn add file:./config/注意最后有 /

/package.json 就会出现 config ,只不过对应的是 文件,而不是 版本号 或者 标签

json
{
  "name": "test",
  "version": "1.0.0",
  "main": "index.js",
  "dependencies": {
    "config": "file:./config"
  }
}

测试

最后在 /index.js 里面测试

js
const config = require('config')
console.log(config.A)           \\1
console.log(config.B)           \\2
console.log(config.C)           \\3

写在最后

虽然这样可以更好的引入 config ,但也会出现不方便的时候,如果 config 文件频繁更改,那么每次更改都需要更新 package

不过既然是配置文件,那么我想更新频率应该不会很好,不过也看具体的使用情况。