Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

npm包二三事 #5

Open
SunXinFei opened this issue Mar 14, 2018 · 1 comment
Open

npm包二三事 #5

SunXinFei opened this issue Mar 14, 2018 · 1 comment

Comments

@SunXinFei
Copy link
Owner

在此之前先说下nrm,因为国内的开发者一般为了速度,是将自己的npm镜像设为taobao的那个,在这里如果使用该网址,会出现一些错误no_perms Private mode enable, only admin can publish this module:xxx,所以我们需要nrm这个工具来切换我们的NPM源,这点一定要注意。

  1. 首先在npm官网注册
  2. 在本地输入命令npm adduser,然后输入用户名,密码,邮箱即可登入成功,登陆成功后,输入npm whoami如果出现了你的用户名,说明你已经成功登陆了。
  3. 选择一个文件夹,执行npm init命令,
  4. 接下来就是一长串表单:
  • name:填写你这个包的名字,默认是你这个文件夹的名字。不过最好先去npm官网上找一下有没有同名的包。不然还得改名字
  • version:包的版本,默认是1.0.0
  • description:一句话描述你的包是干嘛用的
  • entry point:入口文件,默认是Index.js
  • test command:测试命令
  • git repository:这个是git仓库地址,如果你的包是先放到github上或者其他git仓库里,这时候你的文件夹里面会存在一个隐藏的.git目录,npm会读到这个目录作为这一项的默认值。如果没有的话,直接回车继续。
  • keyword:这个是一个重点,这个关系到有多少人会搜到你的npm包。尽量使用贴切的关键字作为这个包的索引。
  • author:写你的账号或者github账号
  • license:开源文件
  • 然后它就会问你Are you ok?
  1. 然后我们回到我们的文件目录里面去看一看,发现多出来一个package.json文件。
  2. 在文件夹下面创建index.js和readme.md和lib文件夹,index.js写下面的代码:
    module.exports = require('./lib/test')
  3. 在lib文件夹下面创建test.js,写下面代码:
    module.exports = function(){return 'ok'}
  4. 然后运行npm publish命令发布,会看到下面的样子:
npm publish
+ [email protected]
  1. 如果之前发布过,又执行publish,会出现versins错误,那么就去package.json里面把version改一下,比如从1.0.0改成1.0.1,就可以正常发布了。
    You cannot publish over the previously published versions: 1.0.0. : sunxinfei-react-test
  2. 发布成功之后,可以在npm官网上看到你的package。
@SunXinFei SunXinFei self-assigned this Mar 29, 2018
@SunXinFei SunXinFei removed their assignment Apr 29, 2020
@SunXinFei SunXinFei reopened this Dec 1, 2020
@SunXinFei
Copy link
Owner Author

SunXinFei commented Dec 1, 2020

控制npm上传的文件

主要是通过package.json中的files属性,如files:["package.json","src"],表示发布文件的白名单。
当然也可以通过.npmignore设置黑名单
优先级是files>.npmignore>.gitignore

cdn的方式查看npm包的文件

https://classic.yarnpkg.com/zh-Hans/package/react-grid-layout-between
这个网站给出了三种CDN的方式访问npm包文件:
https://bundle.run/[email protected]
https://unpkg.com/browse/[email protected]/
https://cdn.jsdelivr.net/npm/[email protected]/
和一种在线查看方式:
https://classic.yarnpkg.com/zh-Hans/package/react-grid-layout-between?files

关于npm版本号

npm版本号对于npm开发者来说是需要控制好的,避免出现使用者更新包之后出现不可使用的情况。
规范下的程序版本号使用的描述格式是:主版本号.次版本号.修订号,版本号递增规则如下:

  • 主版本号:当你做了不兼容的 API 修改,
  • 次版本号:当你做了向下兼容的功能性新增,
  • 修订号:当你做了向下兼容的问题修正。

先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

详情见:SamHwang1990/blog#7

关于npm其他的依赖版本类型

除了上面符合semver 的版本号声明外,npm、yarn 还支持扩展的版本号声明来支持git、github 等:

  • http://... :指定目标依赖的一个可下载的url;
  • git url 将依赖指向一个git 项目路径;
  • user/repo :指向Github 上某个用户的某个项目;
  • tag:指向一个tag commit,建议tag 名字不要以单词v开头,避免与版本号混淆;
  • file:path/to/local/file:将依赖指向本地环境的文件;

上面的git url、user/repo均支持使用commit-ish 作后缀来更精确的指向项目的某次提交、某个tag 或某个分支。

关于peerDependencies

peerDependencies的目的是提示宿主环境去安装满足插件peerDependencies所指定依赖的包,然后在插件import或者require所依赖的包的时候,永远都是引用宿主环境统一安装的npm包,最终解决插件与所依赖包不一致的问题。
参考:https://segmentfault.com/a/1190000022435060

npm包版本管理

生成测试包:npm version prerelease --preid=beta
发布测试包: npm publish --tag beta

发布正式包

npm version patch 
npm publish

指定版本 npm version 0.2.0-beta.0
发布正式包

npm version minor
npm publish

查看tag列表:npm dist-tag ls
查看npm包信息:npm info

参考:canvasT/blog#2

package-lock.json 与 npm ci

image

参考:https://juejin.cn/post/7078233610683170824

@SunXinFei SunXinFei changed the title 发布一个npm包 npm包二三事 Dec 1, 2020
@SunXinFei SunXinFei reopened this Apr 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant