经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
基于webpack5封装的cli工具packx
来源:cnblogs  作者:记忆的森林  时间:2021/6/21 10:06:37  对本文有异议

安装

npm / yarn 安装:

  1. $ npm install -D packx
  2. $ yarn add -D packx

特性

  1. 基于 webpack5
  2. 支持 less,sass
  3. 支持 spa/mpa
  4. 支持 typescript
  5. 支持自定义html模板和自动生成 html入口
  6. 支持 react hmr
  7. 支持扩展 postcss, 比如 px2rem, px2viewport
  8. 支持自定义配置packx.config.js,覆盖默认webpack配置 (基于 webpack merge 算法)
  9. 支持 node api 调用和命令行调用
  10. 支持ssr

用法

  • 开发 packx start [-p port]
  • 构建 packx build [-p publicPath]
  • 自定义 packx run [--build],配置 packx.config.js
  • js api 调用
  • ssr

入口在 ./src 目录下,比如./src/index.jsx

  1. --src
  2. - index.jsx;

运行 packx start

入口在 ./src/page/ 目录下,比如./src/page/index.tsx

  1. --src
  2. --page
  3. -index.tsx;

运行 packx start page

入口 html, 如果项目不包含 index.html ,默认会生成 index.html,可以自定义 html 结构
  1. <!DOCTYPE html>
  2. <html lang="zh-cn">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta
  6. name="viewport"
  7. content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,minimal-ui,viewport-fit=cover"
  8. />
  9. <meta name="format-detection" content="telephone=no, email=no" />
  10. <meta name="apple-mobile-web-app-capable" content="yes" />
  11. <meta name="apple-touch-fullscreen" content="yes" />
  12. <title></title>
  13. </head>
  14. <body style="font-size: 14px">
  15. <div id="root"></div>
  16. </body>
  17. </html>

扩展 postcss 插件

项目根目录添加 postcss.config.js, 以添加 px2viewport 为例

  1. module.exports = (ctx) => {
  2. if (!/node_modules/.test(ctx.file)) {
  3. ctx.options.plugins.push([
  4. require('postcss-px-to-viewport'),
  5. {
  6. unitToConvert: 'px',
  7. viewportWidth: 375,
  8. unitPrecision: 5,
  9. propList: ['*'],
  10. viewportUnit: 'vw',
  11. fontViewportUnit: 'vw',
  12. selectorBlackList: ['ignore'],
  13. minPixelValue: 1,
  14. mediaQuery: false,
  15. replace: true,
  16. exclude: [/node_modules/],
  17. include: undefined,
  18. landscape: false,
  19. landscapeUnit: 'vw',
  20. },
  21. ]);
  22. }
  23. };

packx run 通过 packx.config.js 自定义配置

注意,除了 entry 限制为 object 外, 配置项和 webpack 配置一致
下面通过自定义配置 packx.config.js 实现了 mpa 项目的打包

  1. const path = require('path');
  2. module.exports = {
  3. entry: {
  4. h5: './src/h5/index',
  5. pc: './src/pc/index',
  6. },
  7. output: {
  8. path: path.resolve(__dirname, './dist/packx-demo'),
  9. publicPath: '',
  10. },
  11. };
  • 开发 packx run
  • 构建 packx run --build

node 命令行用法

packx 默认导出了一个 nodeApi, 函数签名如下, Configuration 为 webpack 配置对象

  1. export default function nodeApi(isDev: boolean, config: Configuration, callback?: () => void): void;
  1. const { default: pack } = require('packx');
  2. ...
  3. pack(isDev, {
  4. entry: {
  5. index: `./src/index`,
  6. },
  7. devServer: {
  8. port: 3000
  9. },
  10. output: {
  11. path: getDist('dist'),
  12. publicPath,
  13. },
  14. }, () => {
  15. // 构建结束处理
  16. });

项目结构和打包输出如下图

structure.png

ssr

ssr和上述使用参考packx-demo库

项目代码参考 https://github.com/leonwgc/packx-demo

原文链接:http://www.cnblogs.com/leonwang/p/14907109.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号