一文教你构建本身的library、webpack优化和npm版本掌握

引见

构建本身的UI库,你必须要对一款打包东西熟习(webpack, gulp或许grunt), 本文以webpack为例。

github 地点: https://github.com/reming0227… (点个 star,给我们一点动力 )

中文文档: https://atom-design.github.io…

demo 地点: https://atom-design.github.io…

交换地点: https://gitter.im/atom_design…

点个star,感谢! 这套UI费了几个月时候和许多心血,如今已趋于完美,你完全能够在你的临盆环境中试着运用。关于机能的斟酌,以及js/css紧缩,按需引入等等都已很完美。这套UI库富含挪动端能够遇到的手势组件、弹出组件、懒加载、转动加载等等…

中文文档地点

https://atom-design.github.io…

如今进入正题吧~~~

webpack设置

起首就是webpack设置,我用解释的情势申明

const path = require('path');
const webpack = require('webpack');
// 用于清空之前的打包文件
const CleanWebpackPlugin = require('clean-webpack-plugin');
// 抽取一切的css到单一文件
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
// 紧缩css
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');

module.exports = {
  entry: {
   'xxx': './packages/xxx.js',
   // 或许你能够多进口设置
   'xxx': './packages/xxx.js'
  },
  output: {
    path: path.resolve(__dirname, 'bundle'), // 打包的文件目次
    filename: './[name].js', // 打包文件名, [name]会本身临盆entry的key名,或许你能够用hash,chunkhash这都是没问题的
    library: 'libraryName', // 设置库名 
    libraryTarget: 'umd', // 设置输出对象的范例,你能够运用amd, commonjs, commonjs2,假如要兼容amd和commonjs则运用umd
    globalObject: 'this', // 设置库的全局环境, umd则运用this
    umdNamedDefine: true // umd输出是不是为amd范例定名,默许false
  },
  externals: { // 假如用到分外的第三方库,为了防备第三方库被打包本身的库,能够运用此字段
    vue: {...},
    react: {...}
  },
  module: {
    rules: [
    {
      test: /\.js$/,
      loader: 'eslint-loader',
      enforce: 'pre',
      exclude: path.resolve(__dirname, '/node_modules')
    },
    {
      test: /\.js$/,
      loader: 'babel-loader',
      exclude: path.resolve(__dirname, '/node_modules')
    },
    {
      test: /\.css$/,
      use: [
        MiniCssExtractPlugin.loader, // 运用MiniCssExtractPlugin有个坑, 必须要有css-loader,而且sass-loader,postcss-loader等等要放css-loader以后
        'css-loader',
        'postcss-loader'
      ]
    }]
  },
  resolve: {
    extensions: ['.js'] // 设置默许扩展名,你也能够设置.vue,.ts等等
  },
  plugins: [
    new CleanWebpackPlugin(),
    new MiniCssExtractPlugin({
      filename: 'style.css'
    }),
    // 紧缩css
    new OptimizeCssAssetsPlugin({
      assetNameRegExp: /\.css$/g,
      cssProcessor: require('cssnano'),
      cssProcessorPluginOptions: {
        preset: ['default', { discardComments: { removeAll: true } }],
      },
      canPrint: true
    })
  ]
}

webpack4的production形式会本身运用uglifyjs-webpack-plugin来紧缩js,css须要本身设置紧缩。接着设置.babelrc来运用babel插件以及预设

// .babelrc
{
  "presets": [
    [
      "@babel/preset-env", // 转es5
      {
        "modules": false
      }
    ]
  ],
  "plugins": [...]
  ]
}

npm 宣布

到这里你的webpack就算设置完了,然后你能够打包本身的库。
接着就是npm宣布,你能够用的cnpm,那末你要切回npm, 然后设置.npmignore把不须要传到npm的过滤掉

// .npmignore
/node_modules/
/文件名/
/.npmignore
/xxx.js

以后运用npm publish宣布本身的库, 宣布前请确保本身是不是有REAMDE.MD文件,这个是npm请求一定要上传的文件。包名,版本以及其他信息,npm会从pacakge.json里读取。

你能够会想作废宣布这时候就运用 npm unpublish 库名@版本<br/>
例: npm unpublish libraryName@1.0.0<br/>
作废宣布只要在宣布的24小时以内有用

    原文作者:reming0227
    原文地址: https://segmentfault.com/a/1190000019266499
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞