array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } 111string(0) "" int(1) int(10) int(70) int(8640000) array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } Vue.Js添加自定义插件 - 爱码网

基于上篇我们讲了 在window下搭建Vue.Js开发环境

我们可以开发自己的vue.js插件发布到npm上,供大家下载使用。

1.首先打开cmd命令窗口,进入我们的工作目录下

  执行 cd E:\vue

Vue.Js添加自定义插件

2.使用webpack的简单模板创建我们的项目,比如vue-dialog-rexsheng

vue init webpack-simple vue-dialog-rexsheng

如下图,输入项目名称,项目描述,项目作者,认证单位,sass选择N

Vue.Js添加自定义插件

 

创建成功后,我们会发现工作目录e:/vue下多了一个项目目录vue-dialog-rexsheng

Vue.Js添加自定义插件

3.进入项目目录vue-dialog-rexsheng下,

  cd vue-dialog-rexsheng

Vue.Js添加自定义插件

我们使用visual studio code做为开发工具,在vscode里打开这个项目,项目结构如图

 Vue.Js添加自定义插件

4.项目结构建好后,下面开始开发

  先安装项目的依赖包

   npm install  (若网络不好可使用淘宝镜像进行安装cnpm install,安装参考 在window下搭建Vue.Js开发环境

Vue.Js添加自定义插件

 

 启动项目 npm run dev

 Vue.Js添加自定义插件

浏览器打开网址 http://localhost:8081/ 如上图的蓝色字体,端口根据大家电脑实际情况可能不同

Vue.Js添加自定义插件

项目已经运行起来了,表明项目一开始是ok的,下面进行插件的具体开发

5.vscode里,src目录下新建文件夹lib,lib下新建文件index.js

 Vue.Js添加自定义插件

index.js里输入插件的安装脚本如下图

Vue.Js添加自定义插件

 

插件如何开发请参考 https://cn.vuejs.org/v2/guide/plugins.html

6.打包配置

修改文件webpack.config.js如下图,

Vue.Js添加自定义插件

 

var path = require('path')
var webpack = require('webpack')

module.exports = {
  entry: './src/lib/index.js',//资源入口文件
  output: {
    path: path.resolve(__dirname, './dist'),//打包输出目录
    publicPath: '/dist/',//公共资源路径
    filename: 'dialog.js',//输出的主文件
    library: 'vuedialogrexsheng',//库名,此名称用于require('vuedialogrexsheng')
    libraryTarget: 'umd',//目标平台,libraryTarget会生成不同umd的代码,可以只是commonjs标准的,也可以是指amd标准的,也可以只是通过script标签引入的。
    umdNamedDefine: true//会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define。
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ],
      },      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
          }
          // other vue-loader options go here
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'file-loader',
        options: {
          name: '[name].[ext]?[hash]'
        }
      },
      {
          test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
          loader: 'file-loader',
          options: {
              limit: 10000,
              name: 'fonts/[name].[hash:7].[ext]'
          }
      }
    ]
  },
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js'
    },
    extensions: ['*', '.js', '.vue', '.json']
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true,
    overlay: true
  },
  performance: {
    hints: false
  },
  devtool: '#eval-source-map'
}

if (process.env.NODE_ENV === 'production') {
  module.exports.devtool = '#source-map'
  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"production"'
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}
View Code

相关文章: