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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions