vue2封装组件,上传至NPM

一、开始前的准备工作

1、注册NPM账号:npm | Home

2、检查环境配置:npm、node、webpack、vue

二、封装项目

1、搭建一个vue2项目,如需具体步骤可参考另一篇文章:搭建一个vue2项目_vue2安装-CSDN博客

2、修改目录结构和名称(可省略)

vue2项目搭建之初的目录结构一般为下图所示:

我们可以根据项目需要和自身习惯作出调整,我参考了其他文章完成了封装和上传,写在这里作为参考,感谢原文章及作者大大:如何封装Vue组件并上传到npm_vue2 如何将项目组件打包成npm-CSDN博客

        

重点调整为以下文件:

  • src --重命名--> examples
  • components 存放组件(css统一存放各个组件样式,lib存放组件及其js文件,index.js将全部组件注册为全局组件):

  • lib中的js文件用来导出各自的组件:

  • 最后在 components/index.js 将组件库中定义的所有组件引进来,进行导出:

修改完目录结构后要注意,webpack中默认将src/main.js作为入口文件,我们将scr重命名为example,入口文件路径也需要进行相应修改(没有修改文件名称可省略该步骤):

3、封装组件

组件内容根据具体需求写入,规则和在项目中封装子组件是一样的。

4、根目录下新建webpack.components.js文件,其中主要是对组件打包的配置,直接附上代码:

const { VueLoaderPlugin } = require('vue-loader');
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
const glob = require('glob')
const path = require('path')
const list = {}// 动态导入多个组件的入口文件
// 封装组件的一些配置,因为组件打包是单独打包的,所以需要单独配置
async function makeList (dirPath, list) {
  // 拿到所有的入口文件的路径
  const files = await glob.sync(`${dirPath}/**/index.js`)//[ 'components/lib/button/index.js', 'components/lib/icon/index.js']
  // 取出上一级目录的文件名
  files.forEach(file => {
    let name = file.split('/')[2]
    // 判断name是否有后缀名,有的话去除
    if (name.includes('.')) {
      name = name.split('.')[0]
    }
    list[name] = `./${file}`
  })
  // console.log(list)
}
makeList('components/lib', list)
module.exports = {
  entry: list,
  mode:'development',
  output: {
    filename: '[name].umd.js',// webpack打包的时候会将name替换成入口的name名字,例如card.umd.js
    path: path.resolve(__dirname, 'dist'),
    library:'mui',
    libraryTarget: 'umd',// 指定输出格式,umd是一种模块,兼容了CommonJS、AMD、CMD
  },
  plugins: [
    new VueLoaderPlugin(),
    new CleanWebpackPlugin()
  ],
  module: {
    // 配置rules,即什么样的文件,使用什么样的loader
    rules: [
      {
        test: /\.vue$/,
        use: [
          {
            loader: 'vue-loader',
          }
        ]
      },
      {
        test: /\.css$/,
        use: ['style-loader','css-loader']
      },// 处理了css
      {
        test: /\.scss$/,
        use: ["style-loader","css-loader","sass-loader"]
      }, //处理scss
      {
        test: /\.(png|jpg|gif|svg)$/i, // 匹配图片文件格式
        type: 'asset/resource', // 使用内置的asset模块处理资源文件
        generator: {
          filename: 'images/[name][ext]', // 输出的文件名格式
        },
      }
    ],
  },
}
  

5、根目录下新建gulpfile.js,对组件中的scss文件进行处理

const gulp = require('gulp');
// 需要把样式代码导入
const sass = require('gulp-sass')(require('sass'));
// 对css代码进行压缩
const minifyCSS = require('gulp-minify-css');
gulp.task('sass', async function () {
  return gulp.src('components/css/**/*.scss')
    .pipe(sass())// 将scss代码转换成css代码
    .pipe(minifyCSS())// 压缩css代码
    .pipe(gulp.dest('dist/css'))// 输出到打包目录
})

6、根据具体上传需要完善 .gitignore 文件内容

.DS_Store
node_modules
/dist


# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

7、修改打包命令

运行npm run lib后得到的打包文件如下

8、修改package.json文件里的部分属性,编辑组件库相关信息

        1)name:组件库名称;

        2)version:版本号,每次发布到npm上都需要修改

        3)description:填写组件库相关描述;

        4)main:项目入口文件;

        5)删除私有属性private: true;

        6)keywords:设置关键词,便于用户搜索;

        7)files:允许上传的文件(重点注意,不要将所有文件都上传);

        8)author:作者名;

        9)编辑README.md,记录项目有关信息,方便后续维护和使用。

三、打包发布

1、命令行输入

npm login

根据提示输入账号、密码、邮箱登录

最后输入完邮箱后可能会出现该提示:

意思是输入一次性密码,需要到npm官网进行配置,我参考了另一篇文章,感谢原文及作者大大:

npm 发包的 2FA 验证 - 简书

这里做一下内容转述和细节补充,首先在设置中找到Two-Factor Authentication(双因素身份验证)模块

点击进入后会出现一个配置步骤,需要选择 Authenticator App ,会出现一个二维码和code输入框,然后需要在手机上下载一个Authenticator App 

建议在软件商店或App Store下载,打开APP会提示购买年卡之类的,看个人需要,也可以先试用免费版。点击App下方蓝色加号,会进入扫描页面,扫瞄npm网页上出现的二维码,之后可以看到六位数字的验证码,填入刚提到的Code输入框里面

到这一步npm账号和 Authenticator 就绑定在一起了,后续需要使用一次性密码时,打开Authenticator将出现一组6位验证码,输入到命令行就好

出现Logged in as ... on https://registry.npmjs.org/. 说明登录成功

2、命令行输入发布,出现下图运行结果说明上传成功

npm publish

四、使用

1、安装

npm i XXX(设定的npm包名)

安装结束后可以在package.json中查找到

2、使用

在main.js中全局或按需引入(方法与elementUI等UI组件一致)

页面使用

这里需要注意的是,如果在封装的包里有使用第三方组件等,安装使用该包的项目,也需要同步引入相应的第三方组件,否则将会报错无法正常运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值