zoukankan      html  css  js  c++  java
  • 封装一个npm包

    一、项目结构

    ├── .babelrc            // babel 配置
    ├── .commitlintrc.js    // git commit 配置
    ├── .eslintrc.js        // eslint 配置
    ├── .gitignore          // git 忽略文件
    ├── .npmignore          // npm 忽略文件
    ├── README.md           // 项目介绍
    ├── dist                // 生产目录
    │   └── bundle.js       // 打包后的 js 文件
    ├── package-lock.json 
    ├── package.json        // 项目配置
    ├── src                 // 源文件目录
    │   ├── index.js        // 入口文件
    │   └── util.js         // 功能函数
    └── webpack.config.js   // webpack 配置

    二、开发

    1、新建

    mkdir package
    cd package
    npm init
     

    2、安装ESlint

    (ESLint 是一个 可组装的 JavaScript 和 JSX 检查工具,可以用来保证写出语法正确、风格统一的代码)
     

    3、配置Commitlint

    (commitlint 是一个代码的提交规范校验工具,优雅、清晰的提交历史方便团队协作和快速定位问题)
     

    (1)安装 Commitlint 脚手架与 Git Hook 工具

      npm install @commitlint/cli @commitlint/config-conventional husky --save-dev
     

     (2)增加 commitlintrc

    echo "module.exports = {extends: ['@commitlint/config-conventional']};" > .commitlintrc.js

     (3)配置 Git Hooks

     //package.json
    {
      "husky": {
          "hooks": {
              "pre-commit": "eslint src --fix --ext .js",
              "commit-msg": "commitlint -e"
          }
      }
     

    4、打包

    (1)安装 webpack

      npm install webpack webpack-cli --save-dev

    (2)增加 webpack.config.js

    (组件一般需要提供 <script> 和 npm install 两种引入方式,所以我们打包时需要选择 umd 规范。)
     
      const path = require('path');
      module.exports = {
      entry: './src/index.js',
      output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js',
        library: 'package', // 导出变量名
        libraryTarget: 'umd', // 所有的模块定义下都可运行的方式。它将在 CommonJS, AMD 环境下运行,或将模块导出到 global 下的变  量
      } }
     

    (3)配置 npm 命令  

    //package.json
    "scripts": {
        "build": "webpack"

    }

    5、编译

    (在我们开发组件库的过程中,可能会使用到一些 ES6、ES7 语法或者新的 API,而项目打包时为了加快打包构建速度会忽略到 node_modules 下的文件,所以组件最终应该提供一个编译好的 ES5 语法文件,这里我们使用 babel 和 babel polyfill 来编译组件.)
     

    (1)安装 Babel

     npm install @babel/core @babel/preset-env babel-loader @babel/plugin-transform-runtime @babel/runtime-corejs3 --save-dev
     

    (2)增加 .babelrc

       {
      "presets": [
        ["@babel/preset-env"]
        ],
      "plugins": [
        [
          "@babel/plugin-transform-runtime", {
            "corejs": 3
          }
        ]
      ]
    }
     

    ( 3 ) Webpack 配置 babel-loader

    (组件一般需要提供 <script> 和 npm install 两种引入方式,所以我们打包时需要选择 umd 规范。)
    const path = require('path');
    module.exports = {
      entry: './src/index.js',
      output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js',
        library: 'package',
        libraryTarget: 'umd',
      },
      module: {
        rules: [{
          test: /.js$/,
          loader: 'babel-loader',
          exclude: /node_modules/,
        }]
      }
    }
     

    6、开发

    新建一个 src 文件夹,增加 index.js 和 util.js 文件,然后我们运行 npm run build,可以看到 dist 目录下生成了一个打包后的 js 文件。
  • 相关阅读:
    影响一个UIView是否能正常显示的几个因素
    浅谈多进程多线程的选择
    Spring阅读方法
    数据库范式通俗解释
    MySQL学习笔记(二):MySQL数据类型汇总及选择参考
    MySQL学习笔记(一):SQL基础
    存储过程优缺点
    MySQL学习笔记(三):常用函数
    bzoj 3576[Hnoi2014]江南乐 sg函数+分块预处理
    bzoj 3166 [Heoi2013]Alo 可持久化Trie
  • 原文地址:https://www.cnblogs.com/freely/p/14470369.html
Copyright © 2011-2022 走看看