问答

组件库引用的第三方库的样式文件怎么打包进来?

作者:admin 2021-04-22 我要评论

my-ui 库引用了 ant-design-vue , 并且按需引入的. 比如 Select : import Select from "ant-design-vue/lib/select";import 'ant-design-vue/lib/select/style/c...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

my-ui 库引用了 ant-design-vue , 并且按需引入的.
比如 Select :

import Select from "ant-design-vue/lib/select";
import 'ant-design-vue/lib/select/style/css' // css.js 引用 less 格式

打包后, 上面代码没有变, 由于第三库用了 less ,
这就意味着, 我的库使用者需要在编译时引入 ant 的 less文件.
这就需要对应less文件的打包处理(less-loader), 这很麻烦, 且容易出错.

想要的效果:
我的组件库在打包时, 将引入的 ant 组件和样式"拷贝"过来. 组件编译成js拷贝过来, 样式也是编译成js或css形式拷贝过来.
这样, 我的库使用者, 什么都不用做了. 直接使用就可以了.

这是个很麻烦的问题, 希望大概get到我意思的大神给点思路??

使用 rollup 打包 (node 调用方式)

rollup.rollup(inputOptions) 执行打包逻辑. inputOptions 见下方.

主要打包代码:

const inputOptions = {
  input: path.resolve(__dirname, `../packages/${name.split('@yongheui/')[1]}/index.ts`),
  plugins: [
    nodeResolve(),
    css(),
    vue({
      target: 'browser',
      css: false,
    }),
    // 支持 tsx 解析
 babel({
      // presets: ["@vue/babel-preset-jsx"],
 extensions: [".ts", ".js", ".tsx"],
      runtimeHelpers: true,
      // exclude: /node_modules/,
 exclude: 'node_modules/**',
    }),
    commonjs(),
    typescript({
      tsconfigOverride: {
        compilerOptions: {
          declaration: false,
        },
        'exclude': [
          'node_modules',
          '__tests__',
        ],
      },
      abortOnError: false,
    }),
  ],
  external(id) {
    // /*not antd*/
 // if ( /^@?ant-design/.test(id) ) { //   return false; // }
 return /^vue/.test(id)
      || /^@yongheui/.test(id)
      || deps.some(k => new RegExp('^' + k).test(id));
  },
}
const getOutFile = () => {
  const compName = name.split('@yongheui/')[1]
  if(noElPrefixFile.test(name)) {
    return `lib/${compName}/index.js`
 }
  return `lib/y-${compName}/index.js`
}
const outOptions = {
  format: 'es',
  file: getOutFile(),
  paths(id) {
    if (/^@yongheui/.test(id)) {
      if (noElPrefixFile.test(id)) return id.replace('@yongheui', '..')
      return id.replace('@yongheui/', '../y-')
    }
  },
}

// 执行打包
const bundle = await rollup.rollup(inputOptions)
// 输出
await bundle.write(outOptions)
###

将组件样式打包到js文件里即可

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 组件库引用的第三方库的样式文件怎么打

    组件库引用的第三方库的样式文件怎么打

  • fabric 实例化链码的时候出现这样的错

    fabric 实例化链码的时候出现这样的错

  • 小程序多级数组可折叠展开模块问题

    小程序多级数组可折叠展开模块问题

  • poi4 生成 PPTX  文字段落前面始终有一

    poi4 生成 PPTX 文字段落前面始终有一

腾讯云代理商
海外云服务器