由于 YKit 是基于 Webpack 的,因此迁移 Webapck 项目只需要原有配置进行迁移。

1. 安装 qunar 插件

在项目中执行

  1. npm i @qnpm/ykit-config-qunar --registry http://registry.npm.corp.qunar.com/ --save

2. 创建 ykit 配置文件

在项目目录下创建一个名为 ykit.js 的配置文件,示例:

  1. module.exports = {
  2. plugins: ['qunar'],
  3. config: {
  4. // ykit 中没有 entry 和 output 的概念,而是使用 export
  5. // 在本地服务请求时,会实现 /src -> /prd 目录的对应(类似 fekit)
  6. // 比如请求 /prd/script/index.js,则会编译 /src/script/index.js 并返回编译结果
  7. exports: ['./scripts/index.js', './styles/index.scss'],
  8. // 通过 modifyWebpackConfig 可以获取 ykit 基础的 webpack 配置(baseConfig)并进行修改
  9. // 具体更改哪些配置项参照下方的配置表
  10. modifyWebpackConfig: function(baseConfig) {
  11. // ...
  12. return baseConfig
  13. }
  14. }
  15. }

3. 配置 modifyWebpackConfig

modifyWebpackConfig 提供了在 ykit 基础上定制化配置的能力,详见下表:

config 字段环境ykit 默认配置是否支持业务自定义
context-src支持
entry-支持
output.pathlocalprd不建议自定义
devdev不建议自定义,由开发机指定
prdprd不建议自定义,由发布系统指定
output.filenamelocal[name][ext]支持
dev[name]@dev[ext]支持
prd[name]@[chunkhash][ext]支持
output.chunkFilenamelocal[id].chunk.js支持
dev[id].chunk@dev[ext]支持
prd[id].chunk@[chunkhash][ext]支持
module.loaders-css, sass, less, html, json支持
resolve.alias-支持
resolve.extensions-.js, .css, .json, .tpl, .string, .scss, .sass, .less支持
devtoollocal & devcheap-source-map支持
pluginsprdUglifyJsPlugin支持

需要注意的是,不同的配置项要根据当前 ykit 默认来选择赋值、追加或者合并操作,以下是简单示例:

  1. exports.config = function() {
  2. return {
  3. export: ['./scripts/index.js', './styles/index.scss'],
  4. // 通过 modifyWebpackConfig 可以获取 ykit 基础的 webpack 配置(baseConfig)并进行修改
  5. // 具体更改哪些配置项参照下方的配置表
  6. modifyWebpackConfig: function(baseConfig) {
  7. // 设置 alias
  8. baseConfig.resolve.alias = {
  9. 'Utils': '/src/scripts/utils',
  10. 'Plugin': '/src/scripts/plugin',
  11. 'Config': '/src/scripts/config'
  12. };
  13. // 追加 loaders
  14. baseConfig.module.loaders.push ({
  15. test: /\.js|jsx$/,
  16. exclude: /(node_modules|bower_components)/,
  17. loader: 'babel',
  18. query: {
  19. presets: [
  20. 'babel-preset-es2015',
  21. 'babel-preset-react'
  22. ]
  23. }
  24. });
  25. // 更改不同环境的 output.filename
  26. baseConfig.output.local.filename = '[name][ext]';
  27. baseConfig.output.dev.filename = '[name]@dev[ext]';
  28. baseConfig.output.prd.filename = '[name]@[chunkhash][ext]';
  29. return baseConfig;
  30. }
  31. }
  32. };

4. 验证

可针对不同环境,通过本地服务和编译打包资源进行验证

  • local环境: 在项目外执行 (sudo) ykit server,通过本地服务验证资源
  • dev环境: 在项目中执行 ykit pack,资源将被打到 dev 目录下(版本号统一为 @dev)
  • prd环境: 在项目中执行 ykit pack -m,资源将被打到 prd 目录下(带 hash 版本号)