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

创建library

    output: {
path: DIST_PATH,
publicPath: "",
chunkFilename: "[name].js",
filename: "testPlugin.js",
libraryTarget: 'umd',//将你的 library 暴露为所有的模块定义下都可运行的方式
library: 'testPlugin'
},
  • 打包出来后我们会得到一个testPlugin.js,这就是我们自己的三方库。

平台项目中使用

  • 项目中设置externals,目的是使自己项目不会重复打包引入的库
    externals: {
testPlugin:"testPlugin",
},
  • 项目引入
<!--index.html-->
<script src="testPlugin.js"></script>
//index.js
import testPlugin from 'testPlugin';
console.log(testPlugin);
  • 项目打包好
  • 将testPlugin库丢入打包好的dist中
  • 会发现平台项目已经成功引入库
  • 这样会发现只有打包好dist再丢入库才可以看到效果,平时开发环境下怎么办呢,可以使用copy-webpack-plugin,及将静态的文件夹自动拷贝到dist
const copyWebpackPlugin = require('copy-webpack-plugin');

    plugins: [
new copyWebpackPlugin([{
from:__dirname+'/src/static',//打包的静态资源目录地址
to:'./static' //打包到dist下面的static
}]),
...
]
  • 然后只需要改改index.html的引入地址
<script src="static/plugin/testPlugin/testPlugin.js"></script>

发布npm包

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

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

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

发布准备

  • 自己的项目
  • 去npm官网,注册账号。
  • 给自己的npm包想个名字,并通过搜索验证是否没有被占用

改写项目webpack配置

  • 核心,同上面的创建library一样
  • 生产环境配置webpack.config.prod.js
//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
//webpack.config.dev.js
entry: {
app: ['./src/index.js'],
component: ['./src/component/Expression/Expression.js']
},
  • 这样设置之后打包出来只有一个component.js,所以需要修改package的main
  • 修改package.json
  "main": "dist/component.js",
  • package的其他设置

    • 另外package里面的name就是你包的名字
    • version是版本号
    • main是入口文件
    • description是描述
    • repository是线上git地址
    • keywords是关键字,比较重要,别人可以通过这个搜索到你的包
    • author是作者

做完这些就可以发布了

  • npm login

    • 会让你输入账号,密码,邮箱,然后就登陆了
  • 登录成功会出现以下提示信息:Logged in as simbawu on https://registry.npmjs.org/.
    • 注意:如果不是这个,而是我们的其他镜像比如淘宝的,需要先切换回来,否则提交不起npm config set registry https://registry.npmjs.org/,然后再次npm login。
  • npm publish发布
    • 若出现包名和版本号则发布成功

自己发布的react小插件

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

最后

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

个人博客:www.yangyuetao.cn

小程序:TaoLand

webpack创建library及从零开始发布一个npm包的更多相关文章

  1. 发布一个npm包(webpack loader)

    发布一个npm包,webpack loader: reverse-color-loader,实现颜色反转. 初始化项目 mkdir reverse-color-loader cd ./reverse- ...

  2. 如何发布一个npm包(基于vue)

    前言:工作的时候总是使用别人的npm包,然而我有时心底会好奇自己如何发布一个npm包呢,什么时候自己的包能够被很多人喜欢并使用呢...今天我终于迈出了第一步. 前提:会使用 npm,有 vue 基础, ...

  3. 从零开始写一个npm包及上传

    最近刚好自己需要写公有npm包及上传,虽然百度上资料都能找到,但是都是比较零零碎碎的,个人就来整理下,如何从零开始写一个npm包及上传. 该篇文件只记录一个大概的流程,一些细节没有记录. tips:  ...

  4. 从0到1发布一个npm包

    从0到1发布一个npm包 author: @TiffanysBear 最近在项目业务中有遇到一些问题,一些通用的方法或者封装的模块在PC.WAP甚至是APP中都需要使用,但是对于业务的PC.WAP.A ...

  5. 如何发布一个 npm 包

    一 背景 在工作时,突然接到经理的一个要求,需要将一个react的高阶组件函数封装成一个npm包.之前从没弄过,当场还是有些懵逼的,但是这毕竟是工作,不能推脱.于是开始了学习.汤坑之旅.最终包发布,线 ...

  6. (转)前端开发-发布一个NPM包之最简单易懂流程

    原文地址:https://www.cnblogs.com/sghy/p/6829747.html 1.npm官网创建npm账户 npm网站地址:https://www.npmjs.com/ npm网站 ...

  7. 从零开始写一个npm包,一键生成react组件(偷懒==提高效率)

    前言 最近写项目开发新模块的时候,每次写新模块的时候需要创建一个组件的时候(包含组件css,index.js,组件js),就只能会拷贝其他组件修改名称 ,但是写了1-2个后发现效率太低了,而且极容易出 ...

  8. 如何发布一个npm包?

    npm包在现在前端开发中经常使用且便利,而我也是经常使用,而没研究怎么去发布npm.那如何发布npm包呢? 一.在npm的官网上注册一个账号登录,https://www.npmjs.com/ 注意此步 ...

  9. 发布一个npm包

    前言 我这里是写了一个vue轮播图插件,因此我使用了vue的脚手架工具创建一个项目,当然你也可以选择自己搭建脚手架. 本例中我会使用vue脚手架创建一个项目,并发布到npm上面去. 通过脚手架创建项目 ...

随机推荐

  1. learning uboot enable protect console

    reference :https://github.com/lentinj/u-boot/blob/master/doc/README.autoboot how to enable protect s ...

  2. KMP 详解图

  3. [翻译]HTTP: Let’s GET It On!

    原文地址:HTTP: Let’s GET It On! 简介 几周之前,我们了解到HTTP是一个应用级的协议.现在是时候探索我们应该如何在客户端和服务端的通信之间使用这个协议了. 从网络上获取资源 记 ...

  4. Myecilpse web +tomcat 项目: JSP在mysql中创建表

    <%@ page language="java" import="java.util.*" import="com.mysql.jdbc.Dri ...

  5. 关于epoll的IO模型是同步异步的一次纠结过程

    这篇文章的结论就是epoll属于同步非阻塞模型,这个东西貌似目前还是有争议,在新的2.6内核之后,epoll应该属于异步io的范围了,golang的高并发特性就是底层封装了epoll模型的函数,但也有 ...

  6. IDEA创建的Web项目配置Tomcat并启动Maven项目

    点击如图所示的地方,进行添加Tomcat配置页面   弹出页面后,按照如图顺序找到,点击+号     tomcat Service -> Local   注意,这里不要选错了哦,还有一个TomE ...

  7. SVN 将主干的代码合并到分支上

    来源:http://blog.csdn.net/u012701023/article/details/50978154 问题:开发有了项目主干,再次基础上起了一个分支,开发新的功能:因为业务需要,在上 ...

  8. ORACLE常用系统查询

    目录(?)[-] 查询系统所有对象 查看系统所有表 查看所有用户的表 查看当前用户表 查看用户表索引 查看主键 查看唯一性约束 查看外键 查看表的列属性 查看所有表空间 查看oracle最大连接数 修 ...

  9. Generate And Play A Tone In Android hacking

    /*********************************************************************************** * Generate And ...

  10. show point on image

    show point on image... for ( int i = 0; i < probp.size(); i++ ) { cv::Point pt = probp[i]; Distan ...