How do node_modules packages read config files in the project root?(NODE_MODULES包如何读取项目根目录中的配置文件?)
本文介绍了NODE_MODULES包如何读取项目根目录中的配置文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在创建一个NPM包,它需要能够从项目根目录读取配置文件。我不确定该怎么做。
例如
- Next.js可以从项目根目录读取
./pages/
和./next.config.js
- Jest能够从项目根目录读取
./jest.config.js
- ESLint能够从项目根目录读取
./.eslintrc.json
- SPARTER能够从项目根目录读取
./.prettierrc.js
- 类型脚本能够从项目根目录读取
./tsconfig.json
- Babel能够从项目根目录读取
./.babelrc
我试着查看他们的源代码,看看他们是如何做到这一点的,但项目太大了,我找不到相关的部分。
他们如何实现这一点?
推荐答案
首先在path.dirname(process.mainModule.filename)
中搜索,然后在目录树../ ../../
中向上搜索,依此类推,直到找到该文件。
以下是我从rc(https://github.com/dominictarr/rc)包中窃取的代码:
const fs = require('fs');
const path = require('path');
// Utils shamefully stolen from
// https://github.com/dominictarr/rc/blob/master/lib/utils.js
find(...args) {
const rel = path.join.apply(null, [].slice.call(args));
return findStartingWith(path.dirname(process.mainModule.filename), rel);
}
findStartingWith(start, rel) {
const file = path.join(start, rel);
try {
fs.statSync(file);
return file;
} catch (err) {
// They are equal for root dir
if (path.dirname(start) !== start) {
return findStartingWith(path.dirname(start), rel);
}
}
}
parse(content) {
if (/^s*{/.test(content)) {
return JSON.parse(content);
}
return undefined;
}
file(...args) {
const nonNullArgs = [].slice.call(args).filter(arg => arg != null);
// path.join breaks if it's a not a string, so just skip this.
for (let i = 0; i < nonNullArgs.length; i++) {
if (typeof nonNullArgs[i] !== 'string') {
return;
}
}
const file = path.join.apply(null, nonNullArgs);
try {
return fs.readFileSync(file, 'utf-8');
} catch (err) {
return undefined;
}
}
json(...args) {
const content = file.apply(null, args);
return content ? parse(content) : null;
}
// Find the rc file path
const rcPath = find('.projectrc');
// Or
// const rcPath = find('/.config', '.projectrc');
// Read the contents as json
const rcObject = json(rcPath);
console.log(rcObject);
您还可以将RC包用作依赖项npm i rc
。
请注意,这是同步,因此它将阻止代码执行,直到它完成。
这篇关于NODE_MODULES包如何读取项目根目录中的配置文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:NODE_MODULES包如何读取项目根目录中的配置文件?
基础教程推荐
猜你喜欢
- Chart.js 在线性图表上拖动点 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- 直接将值设置为滑块 2022-01-01