npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vue-ant-second-packag

v0.0.3

Published

学习npm发布组件,ant design vue 二次封装

Downloads

3

Readme

vue-npm

##以ant design vue 为基础ui框架,二次开发组件,发布npm

引入less

学习地址:https://juejin.im/post/6844904000655998984#heading-0

vue.config.vue配置

//引入nodejs中fs模块在处理文件信息
const fs = require('fs');
//引入nodejs中path模块来处理文件路径。
const path = require('path');

//把目标路径按当前文件路径转成绝对路径的方法
function resolve(dir) {
    return path.resolve(__dirname, dir)
}
const join = path.join
function getEntries(path) {
    let files = fs.readdirSync(resolve(path));
    const entries = files.reduce((ret, item) => {
        const itemPath = join(path, item)
        const isDir = fs.statSync(itemPath).isDirectory();
        if (isDir) {
            ret[item] = resolve(join(itemPath, 'index.js'))
        } else {
            const [name] = item.split('.')
            ret[name] = resolve(`${itemPath}`)
        }
        return ret
    }, {})
    return entries
}

//开发环境配置
const devConfig ={
    pages:{
        index:{
            entry:'examples/main.js',   //程序入口
            template:'public/index.html',
            filename:'index.html'
        },
    },
    configureWebpack:{
        resolve:{
            extensions:['.js','.vue','.json'],
            //配置别名,在项目中可缩减引用路径
            alias:{
                '@' : resolve('packages'),
                'assets' : resolve('examples/assets'),
                'views' : resolve('examples/views')
            }
        }
    },
    chainWebpack: config => {
        config.module
            .rule('js')
            .include
            .add('/packages')
            .end()
            .use('babel')
            .loader('babel-loader')
            .tap(options => {
                return options
            })
    },
    devServer: {
        port: 8091,
        hot: true, //开启热更新
        open: 'Google Chrome' //固定打开浏览器
    }
}
//生成环境配置
const buildConfig = {
    css: {
        sourceMap: true,
        extract: {
            filename: 'style/[name].css'
        }
    },
    configureWebpack: {
        entry: {
            ...getEntries('packages'),
        },
        output: {
            filename: '[name]/index.js',
            libraryTarget: 'commonjs2',
        }
    },
    chainWebpack: config => {
        config.module
            .rule('js')
            .include
            .add('/packages')
            .end()
            .use('babel')
            .loader('babel-loader')
            .tap(options => {
                return options
            })
        config.optimization.delete('splitChunks')
        config.plugins.delete('copy')
        config.plugins.delete('html')
        config.plugins.delete('preload')
        config.plugins.delete('prefetch')
        config.plugins.delete('hmr')
        config.entryPoints.delete('app')

        config.module
            .rule('fonts')
            .use('url-loader')
            .tap(option => {
                option.fallback.options.name = 'static/fonts/[name].[hash:8].[ext]'
                return option
            })
    },
    outputDir: 'lib', //我们将组件库打包编译后放在lib文件夹中,在vue.config.js文件中配置内容
    productionSourceMap: false, //关闭source map
}

module.exports = process.env.NODE_ENV === 'development' ? devConfig : buildConfig;

三、多入口文件页面打包配置

在Vue CLI3搭建的项目中借助babel-plugin-import这个webpack插件并且配置babel.config.js,
来实现组件库的按需引入的前提是组件库是多入口文件页面打包的。

组件开发完成

npm run build 打包编译

package.json 部分配置

{
  "name": "vue-ant-second-packag", //包名称
  "version": "0.0.1", //版本号
  "description": "学习npm发布组件,ant design vue 二次封装",
  "main": "lib/index/index.js", //入口
  "private": false, //是否私有 false 时才能发布npm
  "license": "MIT",
  "author": "ducong",
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "lib": "vue-cli-service build --target lib --name vue-ant-second-packag --dest lib packages/index.js"
  },
 }

设置忽略文件

然后创建 .npmignore 文件,设置忽略文件
该文件的语法和 .gitignore 的语法一样,设置发布到 npm 时忽略哪些目录或文件
.DS_Store
node_modules/
examples/
packages/
public/
vue.config.js
babel.config.js
*.map
*.html

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

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

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

npm 发布

如果以前改过 npm 的镜像地址,比如使用了淘宝镜像,就先改回来 npm config set registry http://registry.npmjs.org 
npm login 登陆npm
npm publish 发布(注意:包名要唯一,否则发布不成功)

项目中应用

##引入包

npm i vue-ant-second-packag

全局引入

main.js
import AndSender from 'vue-ant-second-packag'
import 'vue-ant-second-packag/lib/style/formColl.css' //引入css
Vue.use(AndSender)

页面内应用
 <color-red></color-red>
 <form-coll :formData="formData"></form-coll>
formData:[
        {formType:'aDate',placeholder:'请选择',initValue:'',prop:'date',name:'日期'},
        {formType:'aInput',placeholder:'请选择',initValue:'',prop:'name',name:'姓名'},
        {formType:'aRadio',initValue:'',prop:'sex',name:'单选',radioLable:[{value:0,lable:'男'},{value:1,lable:'女'}]},
        {formType:'aSelect',placeholder:'请选择',initValue:'',prop:'type',name:'类型选择',selectLable:[{value:0,lable:'aInput'},{value:1,lable:'aRadio'}]},
      ],//表单数据 formType:表单类型 placeholder:表单提示,initValue:初始值 prop:绑定的字段 ,name:表单名

按需引入

(1)在引用组件库demo中,执行npm install babel-plugin-import --save-dev安装babel-plugin-import插件,利用它实现组件按需引入。
(2)在根目录下.babelrc.js文件中按如下配置
module.exports = {
    "presets": ["@vue/app"],
    "plugins": [
        [
            "import",
            {
                "libraryName": "vue-ant-second-packag",//组件库名称【注意:改成自己发布包的名字】
                "camel2DashComponentName": false,//关闭驼峰自动转链式
                "camel2UnderlineComponentName": false//关闭蛇形自动转链式
                "style": (name) =>{
                    const cssName = name.split('/')[2];
                    console.log(cssName)
                    return `vue-ant-second-packag/lib/style/${cssName}.css`
                }
            }
        ],
    ]
}
(3)在main.js写入
import { formColl,colorRed } from 'vue-ant-second-packag'
Vue.use(formColl)
Vue.use(colorRed)
(4)在页面中引入 
    <color-red></color-red>
    <form-coll :formData="formData" :formStyle="formStyle" @inputsData="getInputsData"></form-coll>

组件的使用

(1)页面引入方式
 <form-coll :formData="formData" :formStyle="formStyle" @inputsData="getInputsData"></form-coll>
(2) formData 数据格式
    [
        {formType:'aDate',placeholder:'请选择',initValue:'',prop:'date',name:'日期'},
        {formType:'aInput',placeholder:'请选择',initValue:'',prop:'name',name:'姓名'},
        {formType:'aRadio',initValue:'',prop:'sex',name:'单选',radioLable:[{value:0,lable:'男'},{value:1,lable:'女'}]},
        {formType:'aSelect',placeholder:'请选择',initValue:'',prop:'type',name:'类型选择',selectLable:[{value:0,lable:'aInput'},{value:1,lable:'aRadio'}]},
    ],//表单数据 
(3)formType:表单类型 主要分为 aDate(日期类型)aInput(input框)aRadio(单选框) aSelect(下拉选择)
     placeholder:表单提示,(单选时,此值可不定义)
     initValue:初始值 ,
     prop:绑定的字段 ,
     name:表单名,
     radioLable 单选数据(在类型为aRadio 时存在) 数据类型Array
     selectLable 下拉框数据(在类型为aSelect 时存在) 数据类型Array
(4) formStyle 表单样式 非必填项 默认值  {formLayout:'inline',colSm:12,colMd:24}
(5)@inputsData="getInputsData" 接收子组件传回值