最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 使用webpack搭建一个vue插件

    正文概述 掘金(用户8317282926591)   2020-12-02   483

    前言

    作为一个现代前端,webpack多多少少都有接触过,但是我们平常都是直接使用脚手架工具搭建项目,自动集成了webpack,对于如何从0到1搭建一个webpack工程我们并不熟悉,那么我们今天就一起手把手来搭建一个基于webpack的vue插件,相信在这个过程中我们能够对webpack的使用有更深入理解。

    环境准备

    • node版本 >= 10.13.0

    初始化项目

    1. 创建项目目录mkdir vue-plugin-demo && cd vue-plugin-demo

    2. 初始化成npm包npm init

    3. 安装webpack相关依赖npm install --save-dev webpack webpack-cli cross-env

    验证webpack是否安装成功

    1. 在项目根目录下建src目录,并创建index.jsmkdir src && touch src/index.js

    2. 随便写点儿代码在里面:

    export default function Foo() {
        console.log('年轻人要讲武德')
    }
    Foo()
    
    1. 在项目根目录下建一个build目录,并创建webpack配置文件webpack.dev.jsmkdir build && touch build/webpack.dev.js
    // build/webpack.dev.js
    module.exports = {
        entry: {
            main: './src/index.js'
        },
        output: {
            filename: "[name].js",
            libraryTarget: 'umd',
            umdNamedDefine: true
        }
    }
    
    1. 在package.json的scripts中加入命令:
    {
      ...
      "scripts": {
        "dev": "webpack --config build/webpack.dev.js"
      }
      ...
    }
    
    1. 执行命令npm run dev验证打包,会看到根目录下会多出一个dist目录,里面的main.js就是打包出来的文件。

    使用webpack搭建一个vue插件

    编写vue插件

    1. 在src下面创建组件touch src/my-component.vue

      // src/my-component.vue
      <template>
          <div class="my-component">
              <span>我的第一个vue插件</span>
          </div>
      </template>
         
      <script>
          export default {
              name: "MyComponent"
          }
      </script>
         
      <style scoped lang="stylus">
          .my-component {
              span {
                  font-size: 20px;
                  color: red;
              }
          }
      </style>
      
      // src/index.js
      import MyComponent from './my-component.vue'
      import Vue from 'vue'
         
      const plugin = {
          install: function(Vue, options) {
              Vue.component(MyComponent.name, MyComponent)
          }
      }
         
      export default plugin
      
    2. 安装vue、vue-loader和vue-template-compiler,npm install --save-dev vue-loader vue vue-template-compiler

    3. 安装stylus、stylus-loader、css-loader,npm install --save-dev stylus stylus-loader css-loader

    4. 配置webpack.dev.js

      // build/webpack.dev.js
      const VueLoaderPlugin = require('vue-loader/lib/plugin')
      modele.exports = {
          ...
          module: {
              rules: [{
                  test: /\.vue$/,
                  loader: 'vue-loader'
              }, {
                  test: /\.styl(us)?$/,
                  use: [
                      'vue-style-loader',
                      {
                          loader: 'css-loader',
                          options: {
                              esModule: false
                          }
                      },
                      'stylus-loader'
                  ]
              }]
          },
          plugins: [
              // 这个插件是必须的! 它的职责是将你定义过的其它规则复制并应用到 .vue 文件里相应语言的块。例如,如果你有一条匹配 /\.js$/ 的规则,那么它会应用到 .vue 文件里的 <script> 块
              new VueLoaderPlugin()
          ]
          ...
      }
      
    5. 执行npm run dev验证是否配置成功

    编写测试代码

    1. 安装webpack-dev-server和html-webpack-plugin,以便起测试服务,npm install --save-dev webpack-dev-server html-webpack-plugin

    2. 创建webpack.demo.js,touch build/webpack.demo.js

      // build/webpack.demo.js
      const path = require('path')
      const VueLoaderPlugin = require('vue-loader/lib/plugin')
      const HtmlWebpackPlugin = require('html-webpack-plugin')
         
      module.exports = {
          mode: process.env.NODE_ENV,
          entry: './example/main.js',
          output: {
              filename: '[name].js'
          },
          module: {
              rules: [{
                  test: /\.vue$/,
                  loader: 'vue-loader'
              }, {
                  test: /\.styl(us)?$/,
                  use: [
                      'vue-style-loader',
                      {
                          loader: 'css-loader',
                          options: {
                              esModule: false
                          }
                      },
                      'stylus-loader'
                  ]
              }]
          },
          plugins: [
              new VueLoaderPlugin(),
              new HtmlWebpackPlugin({
                  template: './example/index.html'
              })
          ],
          devServer: {
              contentBase: path.resolve(__dirname, '../example/dist'),
              port: 8080
          },
          resolve: {
              alias: {
                  main: path.resolve(__dirname, '../src')
              }
          }
      }
      
    3. 在package.json中添加脚本,"demo": "cross-env NODE_ENV=development webpack serve --progress --config build/webpack.demo.js"

    4. 创建测试文件,mkdir example && touch example/main.js && touch example/index.html

      // example/main.js
      import MyComponent from 'main/index.js'
      import Vue from 'vue'
         
      Vue.use(MyComponent)
         
      new Vue({
          render(h) {
              return h('my-component')
          }
      }).$mount('#app')
      
      // example/index.html
      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>demo</title>
      </head>
      <body>
      <div id="app"></div>
      </body>
      </html>
      
    5. 执行npm run demo,启动好后访问http://localhost:8080/

    使用webpack搭建一个vue插件

    用npm link测试

    1. 构建npm run dev

    2. npm link

    3. 链接到测试项目中去,npm link vue-plugin-demo

    4. 在测试项目中使用

    使用webpack搭建一个vue插件使用webpack搭建一个vue插件使用webpack搭建一个vue插件

    总结

    第一次不用脚手架搭建前端工程会遇到很多坑,只有动手做一遍才能够掌握,最后奉上demo地址https://github.com/775146061/vue-plugin-demo


    起源地下载网 » 使用webpack搭建一个vue插件

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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