让前端飞React.jsJavaScript 进阶营

webpack创建library及从零开始发布一个npm包

2018-09-04  本文已影响0人  TaoLandd

最近公司有个需求,我们部门开发一个平台项目之后,其他兄弟部门开发出的插件我们可以拿来直接用,并且不需要我们再进行打包,只是做静态的文件引入,研究一波后发现,webpack创建library可以实现。

创建library

    output: {
        path: DIST_PATH,
        publicPath: "",
        chunkFilename: "[name].js",
        filename: "testPlugin.js",
        libraryTarget: 'umd',//将你的 library 暴露为所有的模块定义下都可运行的方式
        library: 'testPlugin'
    },

平台项目中使用

    externals: {
        testPlugin:"testPlugin",
    },
<!--index.html-->
<script src="testPlugin.js"></script>
//index.js
import testPlugin from 'testPlugin';
console.log(testPlugin);
const copyWebpackPlugin = require('copy-webpack-plugin');

    plugins: [
        new copyWebpackPlugin([{
            from:__dirname+'/src/static',//打包的静态资源目录地址
            to:'./static' //打包到dist下面的static
        }]),
    ...
    ]
<script src="static/plugin/testPlugin/testPlugin.js"></script>

发布npm包

上面的方法的优点是:如果兄弟部门的三方库变了,只需要他们把打包好的库文件给我们,我们丢进去替换掉以前的就可以了,我们自己并不需要重新打包。

那发布npm包呢?自己没事又摸索了一波,并成功发布了一个可以对文本插入表情的react小插件。
------传送门------

发布准备

改写项目webpack配置

//webpack.config.prod.js  
    entry: {
        component: ['./src/component/Expression/Expression.js']
    },
    output: {
        path: DIST_PATH,
        filename: '[name].js',
        publicPath: "/dist/",
        libraryTarget: 'umd',
        library: 'expression'
    },
    externals: {
        'react': 'react',//因为引入的肯定是react项目,所以不需要再将react打包进npm包
        'react-dom': 'react-dom'
    },
//webpack.config.dev.js
    entry: {
        app: ['./src/index.js'],
        component: ['./src/component/Expression/Expression.js']
    },
  "main": "dist/component.js",

做完这些就可以发布了

自己发布的react小插件

------传送门------

最后

大家好,这里是「 TaoLand 」,这个博客主要用于记录一个菜鸟程序猿的Growth之路。这也是自己第一次做博客,希望和大家多多交流,一起成长!文章将会在下列地址同步更新……
个人博客:www.yangyuetao.cn
小程序:TaoLand

上一篇 下一篇

猜你喜欢

热点阅读