组件发布到npm流程

1,430 阅读2分钟

环境

新建一个组件

1. 创建一个组件文件夹,命名---testButton

//创建testButton目录 用来存放组件
mkdir src
// 创建dist目录  用来存放打包好的文件
mkdir dist
//创建.gitignore  用来添加git忽略的文件
touch .gitignore
// 创建index.html模板
touch index.html
//创建webpack的配置文件
touch webpack.config.js
//进入到testButton目录  
cd src
//在src目录中创建 index文件  入口文件
touch index.js

2. 初始化package.json

npm init

得到如图,继续回车,然后在testButton文件下看到package.json

3. 安装相关依赖

//安装babel
npm install -D babel-loader @babel/core @babel/preset-env @babel/preset-react
//安装react,react-dom
npm install -D react react-dom --save
//安装loader依赖
npm install -D css-loader style-loader --save
//安装webpack相关依赖
npm install -D webpack webpack-cli webpack-dev-server html-webpack-plugin clean-webpack-plugin webpack-node-externals
//设置环境变量
npm install -D cross-env 

4. 修改package.json

"main": "dist/index.js",
"scripts": {
  "test": "jest",
  "start": "cross-env NODE_ENV=development webpack-dev-server --open",
  "build": "cross-env NODE_ENV=production webpack"
},

5. 根目录创建.babelrc文件,支持jsx语法

// .babelrc文件内容如下:
{
  "presets": ["@babel/preset-env", "@babel/preset-react"]
}

6.修改index.html模版文件

<!DOCTYPE html>
<html>
  <head>
    <title>images-viewer-react</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

7. 配置webpack.config.js

const path = require('path');
const NODE_ENV = process.env.NODE_ENV; // 获取环境变量
const isProd = NODE_ENV === 'production';
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); // 每次构建清除上一次打包出来的文件
const nodeExternals = require('webpack-node-externals');
const plugins = isProd ? [new CleanWebpackPlugin()] : [
  // new CleanWebpackPlugin(),
  new HtmlWebpackPlugin({
    filename: 'index.html',
    template: './demo/index.html'
  }),
]
module.exports = {
  mode: isProd ? 'production' : 'development',
  entry: isProd ? './index.js' : './demo/index.js',
  output: {
    filename: 'index.js',
    path: path.resolve(__dirname, './dist'),
    libraryTarget: isProd ? 'umd' : undefined,  // umd通用node和浏览器环境
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        use: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },
    ]
  },
  devServer: {
    contentBase: './dist'
  },
  externals: isProd ? [nodeExternals()] : [], // nodeExternals 使得打包的组件中不包括任何 node_modules 里面的第三方组件,起到减小体积的作用。
  plugins,
};

8. 指向yarn build ,最后目录结构如下

git托管代码

1. 创建git仓库,如图

2. 提交代码到仓库

echo "# test-button" >> README.md
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/candy-girl/test-button.git
git push -u origin main

发布

1. 登录npm

npm login

根据提示输入,如图 注意:发布npm包不能使用淘宝镜像,切换为npm镜像

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

2. 发布

npm publish

注意:如果发布失败,可能已经存在了,修改package.json换个包名试试。 如图,发布成功