项目配置
通常 GojiJS 是开箱即用的,但如果你想自定义构建的过程和结果,可以使用 goji.config.js
文件。
示例
配置文件的示例如下所示:
// `goji.config.js`
module.exports = {
progress: true,
watch: true,
outputPath: path.join(__basedir, 'dist'),
nohoist: {
maxPackages: 3,
},
parallel: {
loader: 4,
minimize: 4,
},
};
选项 - 打包工具
progress
类型:
boolean | undefined
默认值:
true
启用、禁用 GojiJS CLI 进度输出的布尔值。
watch
类型:
boolean | undefined
默认值:开发模式下为
true
,生产模式下为false
。
启用、禁用 GojiJS CLI 监听模式的布尔值。
outputPath
类型:
string | undefined
默认值:
[basedir]/dist/[target]
GojiJS CLI 的输出路径。 默认的文件结构像这样:
.
├── dist
│ ├── alipay
│ ├── baidu
│ ├── qq
│ ├── toutiao
│ └── wechat
└── src
parallel
类型:
undefined | number | { loader?: number; minimize?: number }
默认值:
undefined
一个数字或对象用于启用、禁用 GojiJS CLI 的并行模式。 你可以使用 number
来指定并行任务的数量。 你也可以使用一个对象来指定每个阶段的并行数量。
parallel.loader
类型:
number | undefined
默认值:基于CPU核心数的值。
等于 thread-loader 的 workers
选项的数量加 1
。
请注意,过多的并行任务可能会消耗过多的资源,甚至会降低性能。 参见 阿姆达尔定律。
因此,如果
parallel.loader
是undefined
,workers
的最大值为 3。
parallel.minimize
类型:
number | undefined
默认值:基于CPU核心数的值。
等价于 TerserWebpackPlugin 的 parallel
参数。
configureBabel
- 类型:
undefined | (config: any) => undefined
一个用于定制 GojiJS 内部的 Babel 配置的函数。
config
是 Babel 的配置对象。
module.exports = {
configureBabel: config => {
config.plugins.push('babel-plugin-xxx');
},
};
configureWebpack
- 类型:
undefined | (config: webpack.Configuration, webpackInGoji: typeof webpack) => undefined
一个用于定制 GojiJS 内部的 Webpack 配置的函数。
config
参数是 Webpack 的配置对象,你可以直接修改它。
module.exports = {
configureWebpack: (config, webpack) => {
config.plugins.push(new OtherWebpackPlugin());
},
};
webpackInGoji
参数是 Webpack 的实例。 在某些情况下,您可能希望使用它的字段和方法。
module.exports = {
configureWebpack: (config, webpack) => {
config.plugins.push(
new webpack.DefinePlugin({
MY_ENV: 'hello world',
}),
);
},
};
选项 - 优化输出
nohoist
在 GojiJS 中,我们利用 Webpack 来分析模块依赖并打包代码。 通过 代码分割, 我们可以在子包中从多处引入依赖,包括主包,node_modules
,或者其他子包。 GojiJS 可以将共享的代码提升到主包中的一个公共块文件(通常为 \_goji_commons.js
)里。
这有一个例子,它有5个页面,其中一个在主包中,其他的分布在两个子包(packageA
和 package
)中。
在 GojiJS 中,模块被提升到根公共块中。 这种方式确保了依赖关系符合小程序子包的限制。
nohoist.enable
类型:
boolean | undefined
默认值:在生产模式下为
true
,其他情况下为false
。
在上述例子中,redux
和 date-fns
不被视为共享代码,因此它们可以移动到子包中,从而减小主包的大小。 这种优化被称为不提升(nohoist)。
要启用此功能,您可以将 nohoist.enable
选项设置为 true
。
nohoist.maxPackages
类型:
number | undefined
默认值:
1
有些模块,比如例子中的 lodash
,只被子包共享。 可以将它们复制到子包中。 虽然这增加了总体包的大小,但有效地减少了主包的大小。
要启用此功能,您可以将 nohoist.maxPackages
设置为大于1的数字 N。 被少于或等于 N 的包共享的模块将被复制到 packageName/_goji_nohoist_[contenthash].js
中。
即使代码是重复的,运行时闭包仍然是单例的。
此功能还支持独立分包。
请注意,由于生成了更多的重复代码,此功能可能会影响用户的加载时间。 只有在主包的大小已经超过或即将超过限制时,才应该使用此功能。
nohoist.test
类型:
undefined | string | RegExp | ((module: webpack.Module, chunks: Array<webpack.Chunk>) => boolean)
默认值:
undefined
您可以使用此选项来取消特定模块的提升。
css
该选项可配置 CSS 的处理过程。
css.unit
类型:
undefined | 'keep' | 'to-px' | 'to-rpx'
默认值:
'to-rpx'
GojiJS 有一个内置的 PostCSS 插件叫做 postcss-transform-unit,它可用来转换所有文件中的 CSS 单位。 在某些情况下,您可能想要将 px的用法转换为
rpx` ,反之亦然。 您可以使用此选项。
keep
: 不转换任何 CSS 单位。to-px
: 将rpx
转换为px
。2rpx
等于1px
。to-rpx
: 将px
转换为rpx
。1px
等于2rpx
。
默认值将在将来更改为 "keep"