Skip to content

.packageJson应该在build里,而不是根 #33

@Gaubee

Description

@Gaubee
{
// 也许应该给一个name?
build: [NpmBuilder({...packageJson})]
}

这里头最难的是 dependencies 配置的生成。
参考 #34 ,NpmBuilder 需要根据当先项目中的 deps 配置,自动生成对应的dependencies
而deps中存在 git/file 等其它非npm协议,正常来说我们应该将这些项目直接当作源码项目,把它们的代码打包在一起去编译。
但其实不是,比如我的deps中存在 file:///../peer-project,那么应该也判定一下它不是也有 NpmBuilder,如果有应该优先将它列为 dependencies 依赖,而不是把源码打包在一起。


以及,build 存在的可能是高度自定义的一个情况,而不是当前项目的所有源码:

{build:[
NpmBuilder({name:"@xxx/cli",bin:{ "cli":"./src/cli.ts" } }),
NpmBuilder({name:"@xxx/web",exports:{ ".":"./xxx/index#web.ts" } }),
]}

在这种情况下,NpmBuilder 需要在 onResolve 时分析出它依赖了哪些npm外部包与对应的版本号,而后将这些外部包加入到 dependencies 中。

对此如果要正确地进行下去,NpmBuilder就需要对所有的非npm依赖的子项目它们的NpmBuilder也进行build。换句话说,如果有非npm的deps,就需要进入bfsw模式,将这些子项目根据依赖顺序逐个进行编译才行。
因此 bfsp 就应该由一个缺省的不可少的NpmBuilder,它来负责依赖之间正确构建的保障。这种情况下,它们之间的版本号是明确一一对应的。
而此时build配置也就意味着属于额外的build

也就意味着 build 指令不能少。即便开发者不填写 build 指令,也会有一个默认的 DefaultBuilder 负责 NpmBuilder 与 BfspBuilder。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions