前言
最近新装了vue-cli3,发现node_modules里面的包变成了@vue/cli-xxx,@vue下面包含了好几个文件夹,这个@是什么意思?查了下npm官网上是这么描述的
All npm packages have a name. Some package names also have a scope. A scope follows the usual rules for package names (URL-safe characters, no leading dots or underscores). When used in package names, scopes are preceded by an @ symbol and followed by a slash, e.g.
就是说scope相当于npm包的命名空间,如果以@开头,那它就是一个scope package。
这样分类之后就会使结构更加清晰,比如@vue下面的包都是vue用的,相当于给包做了一个分类。
npm发布包
非scope的包
- 先把registry指向npmjs
npm config set registry https://registry.npmjs.org/
- 登录npm(如果没有账号需要先注册),输入用户名,密码和邮箱
npm login
- 然后在要发布的根目录下
npm publish
scope的包
1,2步骤和前面一样,第三步的时候,如果是npm publish,会出现403,如下
看了官网的说明,说是要在publish的时候加--access public
运行
npm publish --access public
没想到报错了!!!
为什么找不到呢,再次看下npm的官网,发现下面的描述
Each npm user/organization has their own scope, and only you can add packages in your scope. This means you don’t have to worry about someone taking your package name ahead of you. Thus it is also a good way to signal official packages for organizations.
意思就是每个npm包要有个organization作为他们的命名空间,这样才能往里面加package
organization??这是哪里创建的?登录npm的网站上,还真的看到了organization!!
在这里新建一个kaisaui,看到了私有的是要收费的,公有的是免费的,当然毫不犹豫地就创建了公有的~~~
回到之前的命令行,重新执行npm
npm publish --access public
发布成功~~~
撒花~~~
因为我发布的包还会关联scope的包,把scope的包放在dependencies里就可以了,千万不要放在devDependencies,因为这个是开发用的,npm install的时候是不会装这里的包的!!