# @bedrock/core 中文文档

规范地址：https://npmcn.com/package/%40bedrock/core/

版本：6\.3\.0
npm 元数据更新时间：2025-02-14T21:40:22.425Z
中文译文更新时间：2026-11-07T20:24:24.965Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bedrock/core
原文对照：https://npmcn.com/package/%40bedrock/core/?lang=original
项目主页：https://github.com/digitalbazaar/bedrock
源码仓库：https://github.com/digitalbazaar/bedrock

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：212 kB，34 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=18
- 运行依赖：9 个
- 首次发布：2022-03-31T19:39:49.396Z
- 最新版本发布：2024-11-19T22:20:36.520Z
- 近 30 天下载量：4223（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：19（近 12 个月 0 个）

## 中文简介

丰富Web应用的核心基础.

## 安装

```sh
npm install @bedrock/core
```

也可以使用：`pnpm add @bedrock/core`、`yarn add @bedrock/core`、`bun add @bedrock/core`

## README

# 贝德洛克克 _(@ bedrock/core) (中文(简体) )_

![Bedrock Logo](https://npmcn.com/package/%40bedrock/core/branding/BedrockLogo.png)

[![Build Status](https://img.shields.io/github/actions/workflow/status/digitalbazaar/bedrock/main.yml)](https://github.com/digitalbazaar/bedrock/actions/workflows/main.yml) [![Coverage Status](https://img.shields.io/codecov/c/github/digitalbazaar/bedrock)](https://codecov.io/gh/digitalbazaar/bedrock)

丰富Web应用的核心基础.

## 概览

Bedrock 是一个模块化的 Web 应用框架,旨在帮助保存代码 组织良好、安全并允许生态系统在没有不必要的情况下增长 障碍. Bedrock提供了强大的配置系统,基于事件的API, 连接数据能力、安全整合模块和测试能力 使编写模块化的Web应用程序变得容易.

创建 Web 应用程序时, 您需要一个基础 。 还有 有很多不同的技术 在那里可以集成 一个团结的整体 实现这一点。 问题在于寻找 审核, 测试,并结合这些技术 -- -- 所有技术都需要实现 之前,您可以开始 在自己的项目取得重大进展.

贝德洛克是一个有见解但灵活的框架. Bedrock 模块模拟 组织原则和明确准则,供开发人员遵循 分解问题并减少认知负荷.

Bedrock使用node.js并运行在Linux,Mac OS X和Windows上. 它可以运行在一个 低功率笔记本电脑一直到企业服务器.

## 可运行示例

可运行的实例可见于 [基石实例](https://github.com/digitalbazaar/bedrock-examples)。 。 。 .

## 快速示例

```sh
npm install bedrock
```

创建典型应用程序 :

```js
import * as bedrock from '@bedrock/core';

// modules
import 'bedrock-express';
import 'bedrock-mongodb';
import 'bedrock-server';
import 'bedrock-session-mongodb';
import 'bedrock-validation';
import 'bedrock-views';
import 'bedrock-webpack';

bedrock.start();
```

包括 [Vue.js (英语)](https://vuejs.org/)\- 基于前端, `npm install` 这些模块:

```sh
npm install bedrock-vue bedrock-quasar
```

创建一个简单的快取基建应用程序:

```js
import * as bedrock from '@bedrock/core';

// modules
import 'bedrock-express';

bedrock.events.on('bedrock-express.configure.routes', function(app) {
  app.get('/', function(req, res) {
    res.send('Hello World!');
  });
});

bedrock.start();
```

创建一个基础 REST 应用程序,有一个快捷服务器,mongodb数据库, 和 mongodb 备份会话存储 :

```js
import * as bedrock from '@bedrock/core';

// modules
import 'bedrock-express';
import 'bedrock-session-mongodb';
import * as database from 'bedrock-mongodb';

bedrock.events.on('bedrock-mongodb.ready', async () => {
  await database.openCollections(['people']);
});

bedrock.events.on('bedrock-express.configure.routes', function(app) {
  app.get('/people', function(req, res, next) {
    database.collections.people.find({}).toArray(function(err, docs) {
      if(err) {
        return next(err);
      }
      res.send(docs);
    });
  });

  app.get('/people/:name', function(req, res, next) {
    database.collections.people.findOne(
      {name: req.param('name')}, function(err, result) {
        if(err) {
          return next(err);
        }
        res.send(result);
      });
  });

  app.post('/people/:name', function(req, res){
    database.collections.people.insert(
      [{name: req.param('name')}], function(err, result) {
        if(err) {
          return next(err);
        }
        res.send(result.result);
      });
  });

  app.delete('/people/:name', function(req, res){
    database.collections.people.remove(
      {name: req.param('name')}, function(err, result) {
        if(err) {
          return next(err);
        }
        res.send(result.result);
      });
  });
});

bedrock.start();
```

要创建包含身份管理和认证的 E mean 堆栈应用程序, 参见\[bitch-sheed\]项目.

## 综合模块示例

以下是展示贝德洛克事件API的例子. 它创造了一个 模块,其他模块可以附加听众。 这个 还登记a `debug` 显示附着的听众的子命令 到 http 服务器。 此示例还创建了一个模块, 附带一个简单的 http服务器的"Hello World"收听器. 该实例表明如何使用 Bedrock事件API致:

1.  在命令行被检测到时注册一个子命令并处理它 已解析.
2.  创建模块化的 http 服务器, 倾听特权端口( 80), 并发送 自定义事件, 只允许其他模块在服务器上附加听众 在进程权限被取消后.
3.  执行自定义行为( 如: 打印服务器已注册的事件听众) 在所有其他模块启动后, 如果检测到一个子命令 .

### 模块 `bedrock-example-server.js`数字 :

```js
import * as bedrock from '@bedrock/core';
import http from 'http';

// setup default module config
bedrock.config['example-server'] = {port: 80};

const server = http.createServer();

// emitted prior to command line parsing
bedrock.events.on('bedrock-cli.init', function() {
  // add a new subcommand executed via: node project.js debug
  const command = bedrock.program
    .command('debug')
    .description('display registered http listeners')
    .option(
      '--debug-event <event>',
      'The event to print listeners for. [request]')
    .action(function() {
      // save the parsed command information
      bedrock.config.cli.command = command;
    });
});

// emitted after the command line has been parsed
bedrock.events.on('bedrock-cli.ready', function() {
  const command = bedrock.config.cli.command;
  if(command.name() !== 'debug') {
    // `debug` not specified on the command line, return early
    return;
  }

  // emitted after all bedrock.start listeners have run
  bedrock.events.on('bedrock.ready', function() {
    // print out all the listeners that registered with the server
    const event = command.debugEvent || 'request';
    const listeners = server.listeners(event);
    console.log('listeners for event: ' + event);
    listeners.forEach(function(listener, index) {
      console.log(index, listener.toString());
    });
  });
});

// emitted before initialization, to allow any further configuration
bedrock.events.on('bedrock.configure', function() {
  if(bedrock.config.foo) {
    bedrock.config.foo.bar = true;
  }
});

// emitted for early initialization, prior to dropping process privileges
bedrock.events.on('bedrock.admin.init', async () => {
  // listen on port 80
  return new Promise((resolve, reject) => {
    // resolve when listening to allow bedrock to continue processing events
    server.listen(bedrock.config['example-server'].port, () => resolve());
  });
});

// emitted for modules to do or schedule any unprivileged work on start up
bedrock.events.on('bedrock.start', async () {
  // emit a custom event giving other modules access to the example server
  await bedrock.events.emit('example.server.ready', server);
});

// emitted after all bedrock.ready listeners have run
bedrock.events.on('bedrock.started', function() {
  console.log('everything is running now');
});
```

### 模块 `bedrock-example-listener.js`数字 :

```js
import * as bedrock from '@bedrock/core';

// load bedrock-example-server dependency
import './bedrock-example-server.js';

// emitted to allow listeners to be attached to the example server
bedrock.events.on('example.server.ready', function(server) {
  server.on('request', function(request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
  });
});
```

### 示例主要项目 `project.js`数字 :

```js
import * as bedrock from '@bedrock/core';

// bedrock modules to load
import './bedrock-example-server.js';
import './bedrock-example-listener.js';

// change the port to use
// bedrock.config['example-server'].port = 8123;

bedrock.start();
```

运行主工程并显示调试信息 :

```sh
node project.js debug --debug-event request
```

示例输出 :

```
2015-03-05T21:59:23.727Z - info: starting bedrock...
2015-03-05T21:59:23.729Z - info: running bedrock master process pid=7705
2015-03-05T21:59:23.904Z - info: running bedrock worker process workerPid=7711
2015-03-05T21:59:23.906Z - info: startup time: 6ms workerPid=7711
listeners for event: request
0 'function (request, response) {\n    response.writeHead(200, {\'Content-Type\': \'text/plain\'});\n    response.end(\'Hello World\\n\');\n  }'
everything is running now
```

## 配置

关于贝德罗克核心配置的文件,见 [配置( j)](https://npmcn.com/package/%40bedrock/core/lib/config.js)。 。 。 .

## 如何运作

贝德洛克(Bedrock)是一个以节点为主的模块化系统. js. 节点.js 模块可以 使用无害环境管理的API(如: `export` 财务报告和审定财务报表 `import`)等),而贝德罗克模块并无不同. 不过, 贝德洛克还提供了一些额外的低级子系统来帮助模块 坐标。 其中包括: `bedrock.config`, (中文(简体) ), `bedrock.events`, (中文(简体) ), `bedrock.loggers`,以及 `bedrock.util`。 。 。 .

要创建 Bedrock 项目,你只需要创建 JavaScript 文件, 比如说 `project.js`,该进口 `bedrock`,任何其他贝德洛克模块 你有兴趣, 然后打电话 `bedrock.start()`运行您的 项目, 运行 :

```sh
node project.js
```

如果你正在开发你的项目 并且安装了所有开发 用于您正在使用的 Bedrock 模块的软件包, 您也可以轻松测试您的 以及它通过运行而包含的任何模块:

```sh
node project.js test
```

这将执行贝德洛克的内置测试框架,运行所有测试 每个模块都写着。 这个方法确保您正在测试 您的整个项目及其依赖性.

### 基石. 配置

贝德洛克有一个简单但高度定制的配置系统. 全体 配置变量存储在一个共享的 JavaScript 对象中 `bedrock.config`。对象被分割成单独的配置对象 以对象的密钥识别。 例如,贝德洛克引入了 `cli`, (中文(简体) ), `core`, (中文(简体) ), `constants`,以及 `loggers` 对象键。 最好的一个 模块在配置对象中主张自己区域的做法 使用匹配其密钥插入默认配置对象 模块名称或匹配其模块名称减去任何 `bedrock-` 前缀。 对于 实例 [基岩服务器](https://github.com/digitalbazaar/bedrock-server) 模块的特定配置对象可以是 查找于 `bedrock.config.server`A级 `mycompany-feature` 模块将 查找于 `bedrock.config['mycompany-feature']`模块可以定义任何 他们想要使用任何适合的格式的配置变量 他们自己的用途.

这个 `bedrock.util` 模块有设置配置的助手,并在 特别,动态计算配置。 计算值可以帮助 简化依赖性问题,允许在运行时间从 函数或字符串模板。 (注意计算配置成本很小) 视使用情况而定可能很重要的数值。 )

`bedrock.util.config.Config` 围绕配置对象创建一个包装器,并 选项。 这个包装显示一个新的、有帮助的API 见下文。 常见的设置可以看起来像如下.

```js
// an empty config object
let config = {};
// common options
let options = {
  // the config
  config: config
  // local vars used during string template evaluation
  locals: config
};
// wrap the config
let c = new bedrock.util.config.Config(config, options);
```

Bedrock 提供共同的包装 `bedrock.config` 作为 `bedrock.util.config.main`。 。 。 .

要进行简单的配置数据集,请使用 `set()` API (英语).

```js
let c = bedrock.util.config.main;
// set a config variable with a path
// path components are created as needed
c.set('server.port', 8443);
// config is now {"server": {"port": 8443}}
```

普通代码和配置API可以混合. 一个有用的帮助是 `setDefault()`。 。 。 . 此调用允许您在设置前简化一个完整的对象路径 数据。 路径中的对象根据需要创建.

```js
let config = bedrock.config;
let c = bedrock.util.config.main;
// create container object if needed
c.setDefault('accounts.admin', {});
// the config is just a normal object
config.accounts.admin.name = 'Ima Admin';
c.set('accounts.admin.id', 1);
// the config object is returned from setDefault()
let account123 = c.setDefault('accounts.account123', {});
account123.id = 123;
account123.name = 'Account 123';
```

使用 `setComputed()` API 多加一个 在运行时计算值的强特性.

```js
let config = bedrock.config;
// get the Config wrapper for the default bedrock.config
let c = bedrock.util.config.main;
// set static values
c.set('server.port', 8443);
c.set('server.domain', 'bedrock.dev');
// set a computed value that uses values from the main config
c.setComputed('server.host', () => {
  return config.server.domain + ':' + config.server.port;
});
console.log(config.server.host); // "bedrock.dev:8443"
```

计算值的逻辑可以是任何普通代码. 如果源配置值 计算值将反映变化.

```js
let config = bedrock.config;
let c = bedrock.util.config.main;
c.set('server.port', 8443);
c.set('server.domain', 'bedrock.dev');
c.setComputed('server.host', () => {
  // only add the port if it's not the well known default
  if(config.server.port !== 443) {
    return config.server.domain + ':' + config.server.port;
  }
  return config.server.domain;
});
console.log(config.server.host); // "bedrock.dev:8443"
c.set('server.port', 443);
console.log(config.server.host); // "bedrock.dev"
```

`setComputed()` 可以是动词. 可用标准创建一个包装器 `bind()` 函数。 有个帮手打电话来 `computer()` 我会为你做这个.

```js
let config = bedrock.config;
let cc = bedrock.util.config.main.computer();
cc('server.host', () => {
  // only add the port if it's not the well known default
  if(config.server.port !== 443) {
    return config.server.domain + ':' + config.server.port;
  }
  return config.server.domain;
});
```

计算值也可以通过 [摇篮样式字符串 模板](https://lodash.com/docs/#template)。 。 。 .

```js
let config = bedrock.config;
let cc = bedrock.util.config.main.computer();
cc('server.baseUri', 'https://${server.host}');
console.log(config.server.baseUri); // "https://bedrock.dev:8443"
// use locals option to simplify templates
cc('base.computed', '${base.a}:${base.b}:${base.c}');
cc('base.computed', '${a}:${b}:${c}', {locals: config.base});
```

用一个调用设置或计算多个值使用对象标记:

```js
let c = bedrock.util.config.main;
let cc = c.computer();
c.set({
  'server.port': 8443,
  'server.domain': 'bedrock.dev',
  'server.name': 'Bedrock Dev',
  'users.admin.id': 1
});
cc({
  'server.url': 'https://${server.domain}:${server.port}',
  'users.admin.url': '${server.url}/users/${users.admin.id}'
});
```

计算值可以使用索引或 `pushComputed` 特性。 如果使用索引, 数组必须已经存在, 或是 `{parentDefault: []}` 选项. `pushComputed` 将创建 需要时的父数组.

```js
let config = bedrock.config;
let c = bedrock.util.config.main;
let cc = c.computer();
cc('server.baseUri', 'https://${server.host}');
c.setDefault('resources', []);
cc('resources[0]', '${server.baseUri}/r/0');
c.pushComputed('resources', '${server.baseUri}/r/1');
```

### 基石. 活动

有时必须允许模块相互协调 有秩序的时尚 为了实现这一目标,贝德洛克提供了事件API. 贝德洛克 事件 API 与节点的内置 EventEmitter 十分相近,但它提供了一个 几乎没有其他特征.

特别是当Bedrok发布活动时 它可以等待听众跑 执行下一个收听器前的同步代码。 这允许每个听众 根据个人需要同步运行或同步运行, 不担心下一个听众 或下一个事件将被释放 在他们完成他们需要做的事情之前.

贝德罗克的事件系统也提供了另一个特征,即能够 取消活动。 事件取消允许模块构建默认行为 ,可以被其他模块取消。 当同步收听器返回时 `false` 或同步的听众决定 `false`,事件不会是 释放给其余的听众,发出呼吁时,他们决心: `false` 允许排放者采取不同的行动.

送出一个事件:

```js
try {
  const result = await bedrock.events.emit('example-module.foo', data);
  if(result === false) {
    console.log('the event was canceled, but not due to an error');
  }
} catch(err) {
  console.log('an error occurred in a listener and the event was canceled');
}
console.log('the event was not canceled');
```

要创建同步的收听器 :

```js
bedrock.events.on('example-module.foo', function(data) {
  if(anErrorOccurred) {
    throw new Error('foo');
  }
  if(shouldCancel) {
    return false;
  }
  // do something synchronous
});
```

要创建一个同步的收听器 :

```js
bedrock.events.on('example-module.promise', data => {
  return new Promise((resolve, reject) => {
    if(anErrorOccurred) {
      reject(throw new Error('foo'));
      return;
    }
    if(shouldCancel) {
      resolve(false);
      return;
    }
    // do something asynchronous, other listeners won't execute and event
    // emission won't continue until you resolve the promise
    process.nextTick(() => {
      resolve();
    });
  });
});
bedrock.events.on('example-module.async-await', async data => {
  if(anErrorOccurred) {
    throw new Error('foo');
  }
  if(shouldCancel) {
    return false;
  }
  // do something asynchronous, other listeners won't execute and event
  // emission won't continue until you return
  await myFunction();
});
```

请注意, 投出错误的同步承诺模拟正在拒绝 带有错误的许诺和返回一个值的模拟(通常只有 用于事件取消)是用值解决“承诺”.

Bedrock核心释放出几个模块可能听取的事件. 这些事件 属于三个可能的命名空间: `bedrock-cli`, (中文(简体) ), `bedrock-loggers` 财务报告和审定财务报表 `bedrock`编辑 `bedrock-cli` 发布事件以便与 贝德洛克指挥行接口. 这个 `bedrock-loggers.init` 发送事件 之后 `bedrock-cli.init` 活动。 这个 `bedrock` 事件在 这些 `bedrock-cli` 事件,除非一个听众取消 `bedrock-cli.ready` 事件或导致应用程序提前退出.

-   **基础-cli.init**
    -   在命令行解析前发送 。 允许新注册 子命令.
-   **基质-cli.parsed**
    -   命令行解析后发送 。 允许配置日志 基于命令行旗。 例如,伐木机可以规定: 规格a `logGroupName` 在运行时可按 一些命令行旗.
-   **基岩开发者.init**
    -   命令行解析后发送 。 允许注册新日志 伐木子系统初始化前的运输.
-   **已经准备好**
    -   命令行解析和日志初始化后发送 。 允许 执行子命令或防止 `bedrock` 从开始的事件 通过取消事件或退出应用程序而释放 早点.
-   **基石. 构型**
    -   于 `bedrock-cli.ready` 和之前 `bedrock.admin.init`。允许 bedrock 初始化后的额外自定义配置 命令行解析.
-   **基础.admin.init**
    -   于 `bedrock.configure` 在提升进程权限之前 被丢弃。 允许听众执行早期初始化任务 需要特殊特权。 请注意,如果Bedrock 开始与提升 权限( 即: 作为 root) , 监听者会使用这些权限执行 。 任意 需要提前执行的早期初始化 `bedrock.start` 但确实 不要求提高特权应推迟到 `bedrock.init`多数 模块应找到约束 `bedrock.init` 足以满足任何 初始化工作.
-   **基辅.init**
    -   于 `bedrock.admin.init` 和刚刚经过升级的过程 放弃权限。 允许听众进行早期初始化 任务不需要特殊特权。 该事件应用于 例如,确保模块的API具有所需的辅助数据 在另一个模块使用之前的内存结构。 例如,a 验证模块可能需要从磁盘上的文件装入验证计划 在通过它的 API 访问它们之前, 但此加载必须发生在 配置事件已经过去,并在特殊进程权限之后 已经放弃. **作为一种最佳做法,模块不应放出习惯 活动期间 `bedrock.init` 因为它可能造成两种情况: 不相关的模块不能轻易地结合.** 例如,如果模块 发布自定义事件 `bedrock.init`然后是那个事件的听众 无法使用一个无关的模块的 API 已经初始化了 推迟向 `bedrock.start` 解决 它确保所有模块都有机会完成 初始化,然后试图通过 事件系统.
-   **基石,开始**
    -   于 `bedrock.init`。这是应当用于 执行或安排他们的主要背景行为并释放任何自定义 他们希望提供给家属的事件.
-   **基础。 准备**
    -   于 `bedrock.start`。允许听众执行自定义行为 在所有模块处理后 `bedrock.start` 活动。 这个事件是 用于打开外部访问网络服务或其他模块 系统现在应完全可以使用。 也可以用来运行 分析已启动的模块,例如: 文档.
-   **基础,开始**
    -   于 `bedrock.ready`外部访问网络服务或其他 现在应提供模块提供的特性。 允许自定义 贝德洛克完全启动后要运行的子命令或行为,例如:测试.
-   **基础 测试 运行**
    -   毕业期间 `bedrock.started`一旦贝德洛克完全开始 事件被释放,以通知测试框架进行测试。 听众 被通过测试状态对象,并带有 `pass` 他们可以设置的属性 `false` 向测试子系统显示至少一个测试没有 通过。 测试框架可以将自己的信息添加到状态对象 使用匹配其框架名称的属性.
-   **基德 停下来**
    -   如果进程处于开始状态, 则在退出时退出 。 这是 活动模块应用来停止服务以进行清洁关闭 放弃任何他们想提供的定制活动 受抚养人.
-   **基石 停止了**
    -   离开时和离开后 `bedrock.stop` 如果进程是先前的 在开始状态。 外部访问网络服务或其他功能 现在不应提供模块.
-   **基石. 出狱**
    -   出发前立即放行.

### 基岩 开发者

Bedrock有一个内置的登录子系统,基于 [温通](https://github.com/winstonjs/winston)随你 能够与 [温通](https://github.com/winstonjs/winston)你可以和贝德洛克一起 贝德洛克提供了一套 适用于大多数应用程序的默认日志。 主要应用 登录器可通过 `bedrock.loggers.get('app')`。呼吁 `bedrock.loggers.addTransport` 可以在操作器处理器发生时 `bedrock-loggers.init` 要添加新内容的事件 [温通](https://github.com/winstonjs/winston) 运输。 日志 类别(例如: `app`)和它们使用的运输工具可以配置 通过 `bedrock.config`。 。 。 .

Bedrock支持多层次的儿童记录器,并带有常见的元数据. 这些是 创建于 `bedrock.loggers.get('app').child({...})`。提供元数据 添加到子日志输出中。 特别的 `module` 元名可以选择 用于相当的输出。 创建命名模块日志的快捷键是 `bedrock.loggers.get('app').child('name')`。 。 。 .

模块前缀显示可以控制每个类别:

```js
// get a child logger with custom module name
let logger = bedrock.loggers.get('app').child('my-module');

// message module prefix controlled with a per-category config value
bedrock.config.loggers.app.bedrock.modulePrefix = false;
logger.info('an info message');
// module displayed as normal meta data:
// 2017-06-30T12:34:56.789Z - info: an info message workerPid=1234, module=my-module

// with module prefix enabled:
bedrock.config.loggers.app.bedrock.modulePrefix = true;
logger.info('an info message');
// displayed as an nice message prefix:
// 2017-06-30T12:34:56.789Z - info: [my-module] an info message workerPid=1234
```

### 基岩. 乌蒂尔

贝德洛克公司提供一些有用的通用公用事业。 譬如说, 贝德洛克定义 a `BedrockError` 扩展默认值的类 `Error` 课。 A 类 `BedrockError` 可跟踪一系列“原因”(其他错误) ,使开发人员能够更好地了解出错的原因. `BedrockError`s 也可以被标记为 `public`,允许模块 例如,在网络上提供错误信息以显示更多错误 细节. `bedrock.util` 还载有日期格式化工具, 扩展/合并/克隆对象,生成UUID.

## 建议的模块

[基岩服务器](https://github.com/digitalbazaar/bedrock-server) 提供基于核心的HTTPS服务器.

[基石表达](https://github.com/digitalbazaar/bedrock-express) 为 Express 服务器提供合理的 默认和额外特性,如平分静态的能力 要支持覆盖的文件和目录.

[基建-蒙戈德b](https://github.com/digitalbazaar/bedrock-mongodb) 为连接到 MongoDB 提供 API 数据库,创建和使用收藏.

[基岩-网络包装](https://github.com/digitalbazaar/bedrock-webpack) 提供网页包配置和构建工具 前端捆绑.

[基本观点](https://github.com/digitalbazaar/bedrock-views) 为服务单页提供基础设施 应用.

[基德维](https://github.com/digitalbazaar/bedrock-vue) 上层 [基本观点](https://github.com/digitalbazaar/bedrock-views) 提供 客户端提交 Vue.js 视图 .

[基岩-夸萨](https://github.com/digitalbazaar/bedrock-quasar) 上层 [基德维](https://github.com/digitalbazaar/bedrock-vue) 提供 客户端的Quasar组件.

[基石账户](https://github.com/digitalbazaar/bedrock-account) 提供用户账户管理.

其他Bedrock模块提供REST API,用户账户管理,强 密码学支持、DoS保护、数字签名、链接数据 其他吨数 [内容](https://npmcn.com/package/%40bedrock/core/FEATURES.md)如果你不需要所有的花花公子 贝德洛克 是模块化的,因此只能使用您想要的模块.

## 快速启动

您可以遵循以下教程设置并在 Linux 上使用 Bedrock 或 Mac OS X开发机.

## 所需资源

-   Linux, Mac OS X, 视窗
-   节点.js >= 18.x
-   npm >= 9.x

## 运行贝德洛克

从源目录运行以下以启动一个开发服务器 :

```sh
node index.js
```

要增加动词调试,请使用 `--log-level` 选项 :

```sh
node index.js --log-level debug
```

## 运行测试

运行所有测试 :

```sh
npm test
```

只运行摩卡测试框架 :

```sh
node index.js test --framework mocha
```

进行特定的摩卡测试:

```sh
node index.js test --framework mocha --mocha-test tests/test.js
```

## 运行代码覆盖工具

```sh
npm run coverage
```

看着 `coverage.html` 使用网页浏览器

## 特征

Bedrock 模块提供的特性列表,请参见 [内容](https://npmcn.com/package/%40bedrock/core/FEATURES.md) 文档.

## 财务问题

见 [财务问题](https://npmcn.com/package/%40bedrock/core/FAQ.md) 用于回答常见问题.

## 抢劫

见 [捐款](https://npmcn.com/package/%40bedrock/core/CONTRIBUTING.md) 用于编码器的各种细节的文件 黑客这个计划.

## 作者数

见 [非盟](https://npmcn.com/package/%40bedrock/core/AUTHORS.md) 用于作者联系信息的文档.

## 许可证

[Apache 许可证,2.0版本](https://npmcn.com/package/%40bedrock/core/LICENSE) 版权所有 2011-2024 Digital Bazaar, Inc.

其他贝德罗克图书馆可使用非商业许可证 诸如自学、研究、个人项目或评价目的. 见 [Bedrock 非商业许可证 v1.0](https://github.com/digitalbazaar/bedrock/blob/main/LICENSES/LicenseRef-Bedrock-NC-1.0.txt) 详细情况.

商业许可证和通过联系获得支助 [数字集市](https://digitalbazaar.com/) [支持@ digitalbazaar.com](mailto:support@digitalbazaar.com)。 。 。 .

## 常见问题

### @bedrock/core 是什么？

丰富Web应用的核心基础\.

### 如何安装 @bedrock/core？

在项目目录运行 npm install @bedrock/core，或使用 pnpm add / yarn add / bun add。

### @bedrock/core 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/bedrock\_\_core 是否存在。

### @bedrock/core 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @bedrock/core 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=18。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @bedrock/core 可以商用吗？

@bedrock/core 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @bedrock/core 的下载量有多少？

根据 npm 官方下载统计，@bedrock/core 在 2026/10/08 – 2026/11/06 这 30 天内被下载 4,223 次，日均约 141 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @bedrock/core 还在维护吗？

最新版本 6\.3\.0 发布于 2024/11/20（2 年前）；至今共发布 19 个版本，其中过去 12 个月发布了 0 个；首次发布于 2022/04/01。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

