npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例)

2025-05-29 0 53

npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例)

前言

在此之前,你需要去npm官网注册一个属于自己的账号,记住自己的账户名以及密码、邮箱,后面会用的到。

第一步,安装webpack简易框架

  1. vueinitwebpack-simplemarquee

npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例)

第二步,封装Vue插件

1、安装完成后,会出现以下目录即可成功

  1. marquee/
  2. ├──index.html
  3. ├──package.json
  4. ├──README.md
  5. ├──.babelrc
  6. ├──.editorconfig
  7. ├──.gitignore
  8. ├──src
  9. │├──App.vue
  10. │├──assets
  11. ││└──logo.png
  12. │└──main.js
  13. └──webpack.config.js

2、接下来,我们在src文件夹下创建一个名叫marquee的文件夹,在文件夹里面创建marquee.vue和index.js

  1. marquee/
  2. ├──index.html
  3. ├──package.json
  4. ├──README.md
  5. ├──.babelrc
  6. ├──.editorconfig
  7. ├──.gitignore
  8. ├──src
  9. │├──App.vue
  10. │├──marquee
  11. ││└──marquee.vue
  12. ││└──index.js
  13. │├──assets
  14. ││└──logo.png
  15. │└──main.js
  16. └──webpack.config.js

3、开始在marquee.vue封装Vue插件了

  1. <template>
  2. <divclass="marquee-wrap">
  3. <!–滚动内容–>
  4. <divclass="scroll">
  5. <pclass="marquee">{{text}}</p>
  6. <!–文字副本–>
  7. <pclass="copy"></p>
  8. </div>
  9. <!–为了计算总文本宽度,通过css在页面中隐藏–>
  10. <pclass="getWidth">{{text}}</p>
  11. </div>
  12. </template>
  13. <script>
  14. exportdefault{
  15. name:'marquee',
  16. props:['val'],
  17. data(){
  18. return{
  19. timer:null,
  20. text:''
  21. }
  22. },
  23. created(){
  24. lettimer=setTimeout(()=>{
  25. this.move()
  26. clearTimeout(timer)
  27. },1000)
  28. },
  29. //把父组件传入的arr转化成字符串
  30. mounted(){
  31. for(letitemofthis.val){
  32. this.text+=''+item
  33. }
  34. },
  35. methods:{
  36. move(){
  37. letmaxWidth=document.querySelector('.marquee-wrap').clientWidth
  38. //获取文字text的计算后宽度(由于overflow的存在,直接获取不到,需要独立的node计算)
  39. letwidth=document.querySelector('.getWidth').scrollWidth
  40. //如果文本内容的宽度小于页面宽度,则表示文字小于等于一行,则不需要滚动
  41. if(width<=maxWidth)return
  42. letscroll=document.querySelector('.scroll')
  43. letcopy=document.querySelector('.copy')
  44. copy.innerText=this.text//文字副本填充
  45. letdistance=0//位移距离
  46. //设置位移
  47. this.timer=setInterval(()=>{
  48. distance-=1
  49. //如果位移超过文字宽度,则回到起点
  50. if(-distance>=width){
  51. distance=16//距离必须与marquee的margin宽度相同
  52. }
  53. scroll.style.transform='translateX('+distance+'px)'
  54. },20)
  55. }
  56. },
  57. beforeDestroy(){
  58. //清除计时器
  59. clearInterval(this.timer)
  60. }
  61. }
  62. </script>
  63. <stylescoped>
  64. .marquee-wrap{
  65. width:100%;
  66. overflow:hidden;
  67. position:relative;
  68. }
  69. .marquee{
  70. margin-right:16px;
  71. }
  72. p{
  73. word-break:keep-all;
  74. white-space:nowrap;
  75. font-size:16px;
  76. font-family:"微软雅黑Light";
  77. }
  78. .scroll{
  79. display:flex;
  80. }
  81. .getWidth{
  82. word-break:keep-all;
  83. white-space:nowrap;
  84. position:absolute;
  85. opacity:0;
  86. top:0;
  87. }
  88. </style>

4、为了方便查看效果,可以在App.vue先引入组件查看效果

  1. <template>
  2. <divid="app">
  3. <Marquee:val="msg"></Marquee>
  4. </div>
  5. </template>
  6. <script>
  7. importMarqueefrom'../src/marquee/marquee.vue';
  8. exportdefault{
  9. name:'app',
  10. data(){
  11. return{
  12. msg:'啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊'
  13. }
  14. },
  15. components:{
  16. Marquee
  17. }
  18. }
  19. </script>
  20. <style>
  21. #app{
  22. font-family:'Avenir',Helvetica,Arial,sans-serif;
  23. -webkit-font-smoothing:antialiased;
  24. -moz-osx-font-smoothing:grayscale;
  25. text-align:center;
  26. color:#2c3e50;
  27. margin-top:60px;
  28. }
  29. h1,h2{
  30. font-weight:normal;
  31. }
  32. ul{
  33. list-style-type:none;
  34. padding:0;
  35. }
  36. li{
  37. display:inline-block;
  38. margin:010px;
  39. }
  40. a{
  41. color:#42b983;
  42. }
  43. </style>

5、启动命令,查看效果

  1. npminstall
  2. npmrundev

第三步,发布Vue插件前配置

1、编辑marquee文件夹下的index.js

  1. marquee/
  2. ├──index.html
  3. ├──package.json
  4. ├──README.md
  5. ├──.babelrc
  6. ├──.editorconfig
  7. ├──.gitignore
  8. ├──src
  9. │├──App.vue
  10. │├──marquee
  11. ││└──marquee.vue
  12. ││└──index.js
  13. │├──assets
  14. ││└──logo.png
  15. │└──main.js
  16. └──webpack.config.js

index.js

  1. //index.js
  2. //引入组件
  3. importmarqueefrom'./marquee';
  4. //组件需要添加name属性,代表注册的组件名称,也可以修改成其他的
  5. marquee.install=Vue=>Vue.component(marquee.name,marquee);//注册组件
  6. exportdefaultmarquee;

2、修改webpack.config.js

  1. constNODE_ENV=process.env.NODE_ENV;
  2. module.exports={
  3. entry:NODE_ENV=='development'?'./src/main.js':'./src/marquee/index.js',
  4. output:{
  5. path:path.resolve(__dirname,'./dist'),
  6. publicPath:'/dist/',
  7. filename:'marquee.js',//输出文件名
  8. library:'marquee',//指定的就是你使用require时的模块名
  9. libraryTarget:'umd',//指定输出格式,UMD同时支持两种执行环境:node环境、浏览器环境。
  10. umdNamedDefine:true//会对UMD的构建过程中的AMD模块进行命名。否则就使用匿名的define
  11. },
  12. }

3、打包

  1. npmrunbuild

如果成功的话,根目录下会出现dist文件夹,里面分别是marquee.js和marquee.js.map

  1. marquee/
  2. ├──dist
  3. │├──marquee.js
  4. │├──marquee.js.map
  5. ├──index.html
  6. ├──package.json
  7. ├──README.md
  8. ├──.babelrc
  9. ├──.editorconfig
  10. ├──.gitignore
  11. ├──src
  12. │├──App.vue
  13. │├──marquee
  14. ││└──marquee.vue
  15. ││└──index.js
  16. │├──assets
  17. ││└──logo.png
  18. │└──main.js
  19. └──webpack.config.js

4、修改package.json

  1. {
  2. "author":"maomincoding",
  3. "main":"dist/marquee.js",
  4. "license":"ISC",
  5. "keywords":["marquee"],
  6. "private":false,
  7. }

author的值为npm用户名,这里一定要注意。main的值为你刚才打包的路径文件license的值按照以上即可keywords为用户搜索的关键词private设为false, 开源因此需要将这个字段改为 false

5、修改.gitignore

可以 删除 dist/字段,提交的时候一并上传上去。

  1. .DS_Store
  2. node_modules/
  3. dist/
  4. npm-debug.log
  5. yarn-error.log
  6. #Editordirectoriesandfiles
  7. .idea
  8. *.suo
  9. *.ntvs*
  10. *.njsproj
  11. *.sln

6、编辑README.md

这是你上传之后的自述文件,可以在网页上显示,用的也是md语法,这里就不显示代码了,来张网页图示范,也可以直接去marquee查看说明

npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例)

第四步,npm包发布

1、在此之前,你一定要注意先查看登录源,切换到根目录下marquee/

  1. npmconfiggetregistry

如果是 https://registry.npm.taobao.org 那么,输入以下命令,切换到http://registry.npmjs.org

  1. npmconfigsetregistry=http://registry.npmjs.org

切换淘宝源

  1. npmconfigsetregistry=https://registry.npm.taobao.org

2、登录,输入命令

  1. npmlogin

相继输入用户名、密码、邮箱。回车出现 Logged in as maomincoding on http://registry.npmjs.org,那么就登陆成功了

3、上传发布

  1. npmpublish

第五步,插件下载使用

替代marquee标签的文字横向滚动Vue插件

1、安装

  1. #installdependencies
  2. npmimarquee-components

2、使用

在main.js引入

  1. importmarqueefrom'marquee-components'
  2. Vue.use(marquee);

在页面使用

  1. <template>
  2. <divid="app">
  3. <marquee:val="msg"></marquee>
  4. </div>
  5. </template>
  6. <script>
  7. exportdefault{
  8. name:'app',
  9. data(){
  10. return{
  11. msg:'vuevuevuevuevuevuevuevuevuevuevuevuevuevuevuevuevue'
  12. }
  13. }
  14. }
  15. </script>

val后加文字即可,当超过文本容器长度时,触动横向滚动效果。

第六步,npm包更新和撤销

1、撤销包

当你想撤销上传的包时,你可以看看下面的说明:撤销的坏处:

  • 1、根据规范,只有在发包的24小时内才允许撤销发布的包。
  • 2、即使你撤销了发布的包,发包的时候也不能再和被撤销的包的名称和版本重复了(即不能名称相同,版本相同,因为这两者构成的唯一标识已经被“占用”了)
  • 3、这里要说一点,取消发布包可能并不像你想象得那么容易,这种操作是受到诸多限制的,撤销发布的包被认为是一种不好的行为(试想一下你撤销了发布的包[假设它已经在社区内有了一定程度的影响],这对那些已经深度使用并依赖你发布的包的团队是件多么崩溃的事情!)

所以,慎行!!!

撤销命令:

  1. npmunpublish包名–force

送给你一句官方说的话

  1. Isurehopeyouknowwhatyouaredoing

2、更新包

看到了撤销的坏处,所以我推荐你更新包。更新包很简单,只需两步:

(1)、打开根目录下的package.json找到version字段具体体现为:"version":"a.b.c"

1.修复bug,小改动,c加1 2.增加了新特性,但仍能向后兼容,b加1 3.有很大的改动,无法向后兼容,a加1

(2)、根目录下输入npm publis

  1. npmpublish

结语

这里是以发布Vue插件为例,你也可以单独发布一个包。

1、输入命令

  1. npminit

根据自己的情况输入然后回车,会自动生成一个package.json文件

  1. {
  2. "name":"vue-cli-configjs",
  3. "version":"2.0.0",
  4. "description":"vue.config.jsbyvue-cli3+",
  5. "main":"vue.config.js",
  6. "scripts":{
  7. "test":"echo\\"Error:notestspecified\\"&&exit1"
  8. },
  9. "keywords":[
  10. "vue-cli-config"
  11. ],
  12. "author":"maomincoding",
  13. "license":"ISC"
  14. }

2、然后建一个readme.md自述文件,用于说明

3、最后发布即可

  1. npmpublish

原文地址:https://mp.weixin.qq.com/s/7tGMTOHCkq5BirTs1iEx6g

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 npm发布包以及更新包还有需要注意的几点问题(这里以发布vue插件为例) https://www.kuaiidc.com/95962.html

相关文章

发表评论
暂无评论