@bedrock/core

中文文档
6.3.0发布于 2024/11/20Apache-2.0ES Module近 30 天下载 4223

丰富Web应用的核心基础.

中文使用文档
文档目录24 节
  1. 概览
  2. 可运行示例
  3. 快速示例
  4. 综合模块示例
  5. 模块 bedrock-example-server.js 数字 :
  6. 模块 bedrock-example-listener.js 数字 :
  7. 示例主要项目 project.js 数字 :
  8. 配置
  9. 如何运作
  10. 基石. 配置
  11. 基石. 活动
  12. 基岩 开发者
  13. 基岩. 乌蒂尔
  14. 建议的模块
  15. 快速启动
  16. 所需资源
  17. 运行贝德洛克
  18. 运行测试
  19. 运行代码覆盖工具
  20. 特征
  21. 财务问题
  22. 抢劫
  23. 作者数
  24. 许可证

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

Bedrock Logo

Build Status Coverage Status

丰富Web应用的核心基础.

概览

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

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

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

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

可运行示例

可运行的实例可见于 基石实例。 。 。 .

快速示例

npm install bedrock

创建典型应用程序 :

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 (英语)- 基于前端, npm install 这些模块:

npm install bedrock-vue bedrock-quasar

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

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 备份会话存储 :

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数字 :

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数字 :

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数字 :

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();

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

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)。 。 。 .

如何运作

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

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

node project.js

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

node project.js test

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

基石. 配置

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

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

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

// 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 (英语).

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()。 。 。 . 此调用允许您在设置前简化一个完整的对象路径 数据。 路径中的对象根据需要创建.

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 多加一个 在运行时计算值的强特性.

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"

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

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() 我会为你做这个.

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;
});

计算值也可以通过 摇篮样式字符串 模板。 。 。 .

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});

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

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 将创建 需要时的父数组.

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 允许排放者采取不同的行动.

送出一个事件:

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');

要创建同步的收听器 :

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

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

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

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

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

// 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 可跟踪一系列“原因”(其他错误) ,使开发人员能够更好地了解出错的原因. BedrockErrors 也可以被标记为 public,允许模块 例如,在网络上提供错误信息以显示更多错误 细节. bedrock.util 还载有日期格式化工具, 扩展/合并/克隆对象,生成UUID.

基岩服务器 提供基于核心的HTTPS服务器.

基石表达 为 Express 服务器提供合理的 默认和额外特性,如平分静态的能力 要支持覆盖的文件和目录.

基建-蒙戈德b 为连接到 MongoDB 提供 API 数据库,创建和使用收藏.

基岩-网络包装 提供网页包配置和构建工具 前端捆绑.

基本观点 为服务单页提供基础设施 应用.

基德维 上层 基本观点 提供 客户端提交 Vue.js 视图 .

基岩-夸萨 上层 基德维 提供 客户端的Quasar组件.

基石账户 提供用户账户管理.

其他Bedrock模块提供REST API,用户账户管理,强 密码学支持、DoS保护、数字签名、链接数据 其他吨数 内容如果你不需要所有的花花公子 贝德洛克 是模块化的,因此只能使用您想要的模块.

快速启动

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

所需资源

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

运行贝德洛克

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

node index.js

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

node index.js --log-level debug

运行测试

运行所有测试 :

npm test

只运行摩卡测试框架 :

node index.js test --framework mocha

进行特定的摩卡测试:

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

运行代码覆盖工具

npm run coverage

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

特征

Bedrock 模块提供的特性列表,请参见 内容 文档.

财务问题

见 财务问题 用于回答常见问题.

抢劫

见 捐款 用于编码器的各种细节的文件 黑客这个计划.

作者数

见 非盟 用于作者联系信息的文档.

许可证

Apache 许可证,2.0版本 版权所有 2011-2024 Digital Bazaar, Inc.

其他贝德罗克图书馆可使用非商业许可证 诸如自学、研究、个人项目或评价目的. 见 Bedrock 非商业许可证 v1.0 详细情况.

商业许可证和通过联系获得支助 数字集市 支持@ digitalbazaar.com。 。 。 .

版本与发布记录

@bedrock/core 共发布 19 个版本,首次发布于 2022/04/01;过去 12 个月发布了 0 个版本。

版本发布日期距今
6.3.0latest2024/11/202 年前
6.2.02024/10/162 年前
6.1.32024/03/062 年前
6.1.22024/02/292 年前
6.1.12024/02/282 年前
6.1.02024/02/132 年前

关于 @bedrock/core 的常见问题

@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 和提交记录判断。