npm发布公共组件包

1,387 阅读3分钟

1. 修改webpack配置

// 在module.export中加入如下代码
// 根据不同的执行环境配置不同的入口
entry: NODE_ENV === 'development' ? './src/main.js' : './src/index.js',
output: {
    path: path.resolve(__dirname, './lib'),
    publicPath: '/lib/',
    filename: 'index.js',
    library: 'mu-design', // 指定require时的模块名
    libraryTarget: 'umd', // 指定输出格式
    umdNamedDefine: true // 会对UMD的构建过程中的AMD模块命名,否则使用匿名的define。
}

library:指定的就是你使用require时的模块名

libraryTarget:为了支持多种使用场景,我们需要选择合适的打包格式。常见的打包格式有 CMD、AMD、UMD,CMD只能在 Node 环境执行,AMD 只能在浏览器端执行,UMD 同时支持两种执行环境。显而易见,我们应该选择 UMD 格式。

有时我们想开发一个库,如lodash,underscore这些工具库,这些库既可以用commonjs和amd方式使用也可以用script方式引入。

这时候我们需要借助library和libraryTarget,我们只需要用ES6来编写代码,编译成通用的UMD就交给webpack了

umdNamedDefine:会对 UMD 的构建过程中的 AMD 模块进行命名。否则就使用匿名的 define

2. 修改package.json文件 和 index.html,添加readme.md

// 发布开源 因此需要将这个字段改为 false
"private": false,
// 这个指 import demo 的时候它会去检索的路径
"main": "./lib/index.js",
// index.html中引用地址也要做相应改变
<script src="/lib/index.js"></script>

3. npm发布包

  1. 发布新包

(1)在npm官网注册账号,地址:www.npmjs.com/ ,注册好之后:

   注意邮箱要验证,会发送验证链接到你的注册邮箱,没有验证的话是不能发布代码的

   看一下package.json 中 author 尽量与 npm 账户一致

(2)切换到需要发包的项目根目录下,登录npm账号,输入用户名、密码、邮箱

// 进入项目根目录,初始化npm包
npm init
// 登录
npmnpm login
// 执行发布
npm publish
  1. 更新包
// 修改包的版本,命令会在原来的版本上自动加1,
// 实际上是将package.json文件中的version值修改了
npm version patch 
// 重新发布包
npm publish
  1. 删除包
// 删除指定的版本
npm unpublish 包名@版本号
// 删除整个包,会有警告提示
npm unpublish 包名 --force

4.使用

// 安装
npm install your-npm-page --save

//main.js中引入
import demo from 'your-npm-page'
Vue.use(demo)

5.调试

通过软链接的方式实现,编辑了本地npm代码,在项目中也能使用编码后的代码

  1. 确保package.json已经正确配置好

  2. 在本地npm模块根目录下执行npm link,把本地模块注册到全局

  3. 在需要引用组件包的项目根目录下执行npm link npm-name,把第2步注册到全局的本地npm模块链接到项目的node_modules下,其中npm-name是指第一步中package.json中配置的模块名

  4. 正常使用npm包

6.常见错误

  1. 当前不是原始镜像,可能用的是其他镜像,如淘宝镜像
no_perms Private mode enable, only admin can publish this module

修改:将npm切回原始镜像

npm config set registry http://registry.npmjs.org

如果使用了nrm工具,可以使用命令nrm use npm切换

  1. 未登录
npm publish failed put 500 unexpected status code 401

修改:重新 npm login

  1. 包名被占用
npm ERR! you do not have permission to publish “your module name”. Are you logged in as the correct user?

修改包名

  1. 邮箱未验证
you must verify your email before publishing a new package

去官网验证一下邮箱

  1. 查看npm是否安装成功
npm who am i
  1. 包名的限制:不能有大写字母、空格、下划线
  2. 由于需要使用Install注册组件,所以一定要注意组件中的name值