{{m...">
最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • rollup初使用(三)

    正文概述 掘金(zsq宜2018)   2021-07-15   1304

    概要:本文主要介绍在rollup中,如何使用rollup编译打包vue组件。

    新建test.vue的一个vue组件

    <template>
      <div class="msg">{{msg}}</div>
    </template>
    <script>
    export default {
      name:'TestComponent',
      setup() {
        const msg = 'hello world!这是我的自定义组件库!';
        return {
          msg
        }
    
      },
    }
    </script>
    <style lang="scss">
      .msg {
        color: red;
      }
    </style>
    

    index.js入口文件中引入test.vue组件

    import test from './test.vue';
    export default function (Vue) {
      Vue.component(test.name, test);
    }
    

    rollup编译打包vue组件需要使用的npm包依赖

    • rollup-plugin-vue@next是用来编译vue代码的。支持vue3
    • @vue/compiler-sfc是rollup-plugin-vue@next插件需要的一个依赖
    • rollup-plugin-postcss sass 主要是因为在vue组件库中用到的样式,用的是sass所以安装sass
    npm i rollup-plugin-vue@next -D
    npm i  @vue/compiler-sfc -D
    npm i rollup-plugin-postcss -D
    npm i sass -D
    

    配置打包配置文件

    const vue = require('rollup-plugin-vue');
    const postcss = require('rollup-plugin-postcss');
      plugins: [
        vue(),
        postcss(),
      ],
    

    此时执行 npm run dev 顺利打包!但是会有警告

    rollup初使用(三) 这个警告说输出文件中缺少一个在浏览器window中设置globals的变量,这个名词跟我们设置的external modoule需要设置成一样的。 在配置文件的output中设置一下即可:

      output: [{
          file: outputPath,
          format: 'umd',
          name: 'datavTest',
          globals: {vue: 'Vue'}
        }]
    

    然后打包会发现组件库是成功的!

    编写example/index.html

    引入vue3的global库cdn,编写一个简单的vue3实例,引入自定义的vue插件之前需要use一下,这里的use(datavTest)对应的是配置文件中output配置的name属性。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script src="https://cdn.jsdelivr.net/npm/vue@3.1.0-beta.7/dist/vue.global.js"></script>
      <script src="../dist/datav.umd.js"></script>
    </head>
    <body>
      <div id="app">{{msg}}
        <data-test-component></data-test-component>
      </div>
      
    </body>
    <script>
      Vue.createApp({
        setup() {
          var msg = 'hello my Vue component!';
          return { msg };
        }
      }).use(datavTest).mount('#app');
    </script>
    </html>
    

    但是当打开index.html的时候会在浏览器中报错说: 页面报错Cannot read property 'openBlock' of undefined

    是因为打包后代码编译的Vue引用不到而引起的 rollup初使用(三) 如上图,在编译后的datav.umd.js文件中找到render函数,将里面的vue改成配置时候设置的Vue即可。再打开页面发现组件显示成功! rollup初使用(三)

    踩坑记录

    • 错误1:[!](plugin vue) TypeError: Cannot read property 'refSugar' of undefined

    解决办法是

    rm -rf node_modules
    rm package-lock.json
    npm cache clear --force
    npm install
    
    • 错误2 [!](plugin commonjs) SyntaxError: Unexpected token (2:2) in D:\noteDemo.. src\test.vue?vue&type=template&id=0f72a62a&lang.js (2:2)

    解决办法是将vue插件放在最上面既可 rollup初使用(三)

    • 错误3 rollup-plugin-postcss ( PostCSS plugin postcss-noop-plugin requires PostCSS 8. Migration guide for end-users:)

    解决办法是 安装 autoprefixer@8.0.0然后修改配置

        postcss({
          // 把 css 插入到 style 中
          // inject: true,
          // 把 css 放到和js同一目录
          extract: true,
          plugins: [
             require('autoprefixer')({ overrideBrowserslist: ['> 0.15% in CN'] }) // 自动添加css前缀
          ]
        })
    
    • 错误4:[!] TypeError: keypath.split is not a function是因为配置globals的时候没有带引号

    rollup初使用(三)

    • 错误5:datav.umd.js:17 Uncaught TypeError: Cannot read property 'withScopeId' of undefined,是因为rollUp不支持css 的scoped,去掉了test.vue中的scoped
    • 错误6:index.html页面报错Cannot read property 'openBlock' of undefined,是因为打包后代码编译的Vue引用不到而引起的

    解决办法:rollup初使用(三)


    起源地下载网 » rollup初使用(三)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元