# large-number-xialuoer

> xialuoer的第一个npm包（大整数加法打包）

Latest version **4.0.0** (published 2022-07-09) · ISC license · 0 weekly downloads

## Install

```sh
npm install large-number-xialuoer
pnpm add large-number-xialuoer
yarn add large-number-xialuoer
bun add large-number-xialuoer
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.0.0 |
| Published | 2022-07-09 |
| First published | 2022-07-03 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 9.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | xialuoer |

## Links

- npm: https://www.npmjs.com/package/large-number-xialuoer
- npm.io page: https://npm.io/package/large-number-xialuoer

## Recent versions

- 4.0.0 (latest) — 2022-07-09
- 3.0.0 — 2022-07-09
- 2.0.0 — 2022-07-03
- 1.0.0 — 2022-07-03

## README

### hello world

这是我的第一个npm包

### 如何发布第一个npm包

#### 1.拥有一个npm官方账号
在官网进行注册，`https://www.npmjs.com/`
账号、密码、邮箱

#### 2.编写一个包
`webpack` 除了可以⽤来打包应⽤，也可以⽤来打包 `js` 库，如建立一个包的流程如下：
 - 创建目录：`mkdir large-number`(包名)
 - 进入目录：`cd large-number`
 - 初始化项目：`npm init -y` (`package.json`文件中依次填入包名、版本、描述、`main`入口文件路径等)
 - 安装`webpack`: `npm i webpack webpack-cli -D`
 - 建立文件目录：如`src`目录下（包代码文件）、导出包的入口文件，md说明文件等（具体目录如下图）

构建目录如下图：

**package.json重点字段说明：**
- `name`: 即`npm`项目包名，发布到`npm`时就是取的这个`name`名，你自己取个语义化的名字，和已有的`npm`库不能重复；
- `version`: 版本号，更新`npm`包时必须修改一个更高的版本号后才能成功发布到`npm`，版本号最好遵循`npm`版本管理规范；
- `description`: 包的描述，发布到`npm`后你搜索该`npm`包时，在搜索联想列表里会显示在包名的下方，作为描述说明；
- `main`: 入口文件路径，在你通过`import`或`require`引用该`npm`包时就是引入的该路径的文件；

**学习案例：**
**（1）实现⼀个⼤整数加法库的打包**
- 需要打包压缩版和⾮压缩版本
- ⽀持 `AMD/CJS/ESM` 模块引⼊

**（2）库的目录结构和打包要求**
打包输出的库名称: 
- 未压缩版 `large-number.js`
- 压缩版 `large-number.min.js`

**（3）如何将库暴露出去？**
- `library`: 指定库的全局变量
- `libraryTarget`: ⽀持库引⼊的⽅式

**（4）如何指对 .min 压缩**
通过 `include` 设置只压缩 `min.js` 结尾的⽂件
ps：需提前安装`terser`插件，`npm i terser-webpack-plugun -D`

`webpack.config.js`配置文件设置如下：
```js
const TerserPlugin = require('terser-webpack-plugin')
module.exports = {
    entry: {
        'large-number': './src/index.js',
        'large-number.min': './src/index.js'
    },
    output: {
        filename: '[name].js',
        library: 'largeNumberXialuoer', // 打包出来的库名字
        libraryTarget: 'umd', // 引用库的一个方法
        libraryExport: 'default' // ⽀持库引⼊的⽅式
    },
    mode: 'none',
    optimization: {
        minimize: true,
        minimizer: [
            new TerserPlugin({
                include: /\.min\.js$/  //设置只压缩 min.js 结尾的⽂件
            })
        ]       
    }
}
```
**（5）设置入口文件**
`package.json` 的 `main` 字段为 `index.js`，这样可以保证生产环境用压缩的包，非生产环境用非压缩的包
```js
if (process.env.NODE_ENV === "production") {
module.exports = require("./dist/large-number.min.js");
} else {
module.exports = require("./dist/large-number.js");
}
```

#### 3.发布npm包
（1）在终端登陆npm账号，`npm login`，如若报错，指定为官方镜像,执行 `npm login --registry https://registry.npmjs.org`，输入账号、密码、邮箱、验证码等完成登录（ps: 填写密码没有显示，盲打就行，打完回车键）
（2）执行发布命令 ，`npm publish` or `npm publish --registry https://registry.npmjs.org`
ps： 发布有延迟，可能一时半会在npm官网上搜索不到，或者去自己账号下的package下查看

#### 4.删除npm包
（1）删除指定的版本
`npm unpublish 包名@版本号`

（2）删除整个包
`npm unpublish 包名 --force` //删除已发布包

#### 5.注意事项
 - `npm unpublish` 命令只能删除 72 小时以内发布的包

 - `npm unpublish` 删除的包，在 24 小时内不允许重复发布

 - 发布包的时候要慎重，尽量不要往 `npm` 上发布没有意义的包！

---
_Source: https://npm.io/package/large-number-xialuoer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
