html5读取umd,教程:使用umd、commonjs和es三种模式制作自己的React 组件(库)

创建 package.json 文件

执行命令npm init创建 package.json 文件,一步步输入你自己的组件基本信息,下面是我创建的

{

"name": "react-code-previewer",

"version": "0.0.1",

"description": "基于 react 和 antd 的代码预览器组件",

"main": "index.js",

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1"

},

"repository": {

"type": "git",

"url": "git+ssh://git@github.com/zhangwei900808/react-code-previewer.git"

},

"keywords": [

"react",

"antd",

"code-preview"

],

"author": "zhangwei",

"license": "MIT",

"bugs": {

"url": "https://github.com/zhangwei900808/react-code-previewer/issues"

},

"homepage": "https://github.com/zhangwei900808/react-code-previewer#readme"

}

初始化组件

首先在项目目录下创建相应文件夹和基本配置文件,目录结构如下所示:

|-- com.github

|-- .editorconfig

|-- .gitignore

|-- .npmignore

|-- LICENSE

|-- package.json

|-- .react-code-previewer

|-- components

| |-- index.js

| |-- code-previewer

| |-- index.js

| |-- style

| |-- index.js

| |-- index.scss

|-- src

创建好之后,我们开始制作该组件,在目录 code-previewer/index.js 添加代码,如下所示:

import React, { Component } from "react";

class CodePreviewer extends Component {

render() {

return (

header
content
footer
code header
code tabs
code content

);

}

}

export default CodePreviewer;

在目录 code-previewer/style/index.js 添加代码,如下所示:

import "./index.scss";

在目录 code-previewer/style/index.scss 添加代码,如下所示:

.code-preview-container {

.cp-component {

.component-header {

color: red;

}

.component-content {

color: green;

}

.component-footer {

color: yellow;

}

}

.cp-code {

.code-header {

color: red;

}

.code-tabs {

color: green;

}

.code-content {

color: yellow;

}

}

}

我们现在已经初始化组件内容,虽然很简单,后面我们再优化,现在我们要对外暴露该组件,所以我们在目录 /components/index.js 添加代码,如下:

import CodePreview from "./code-previewer";

export { CodePreview };

export default { CodePreview };

umd 打包

首先我们在目录创建.react-code-preview/webpack.config.umd.js 文件,并添加如下代码:

const fs = require("fs");

const path = require("path");

const webpack = require("webpack");

const UglifyJsPlugin = require("uglifyjs-webpack-plugin");

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const OptimizeCssAssetsPlugin = require("optimize-css-assets-webpack-plugin");

const nodeExternals = require("webpack-node-externals");

const WebpackMd5Hash = require("webpack-md5-hash");

const HtmlWebpackPlugin = require("html-webpack-plugin");

const { CleanWebpackPlugin } = require("clean-webpack-plugin");

const resolve = dir => path.join(__dirname, ".", dir);

const isProd = process.env.NODE_ENV === "production";

const { version, name, description } = require("../package.json");

const distDir = path.join(process.cwd(), "dist");

module.exports = {

mode: "production",

entry: { [name]: "./components/index.js" },

output: {

path: distDir,

filename: "[name].min.js",

// 采用通用模块定义

libraryTarget: "umd",

library: name

},

devtool: "#source-map",

module: {

rules: [

{

test: /\.(js|jsx)$/,

exclude: /node_modules/,

use: {

loader: "babel-loader"

}

},

{

test: /\.(sa|sc|c)ss$/,

use: [

MiniCssExtractPlugin.loader,

{

loader: "css-loader",

options: {

sourceMap: true

}

},

{

loader: "sass-loader",

options: {

sourceMap: true

}

}

]

}

]

},

resolve: {

enforceExtension: false,

extensions: [".js", ".jsx", ".json", ".less", ".css"]

},

// 注意:本地预览的时候要注释,否则报 require undefined

// https://stackoverflow.com/questions/45818937/webpack-uncaught-referenceerror-require-is-not-defined

externals: [nodeExternals()],

plugins: [

new CleanWebpackPlugin({

cleanOnceBeforeBuildPatterns: [distDir]

}),

new MiniCssExtractPlugin({

filename: "[name].css"

}),

new WebpackMd5Hash(),

new webpack.BannerPlugin(` \n ${name} v${version} \n ${description} ${fs.readFileSync(path.join(process.cwd(), "LICENSE"))}`)

],

//压缩js

optimization: {

splitChunks: {

cacheGroups: {

styles: {

name: "styles",

test: /\.scss$/,

chunks: "all",

enforce: true

}

}

},

minimizer: [

new UglifyJsPlugin({

cache: true,

parallel: true,

sourceMap: true

}),

new OptimizeCssAssetsPlugin({

assetNameRegExp: /\.css\.*(?!.*map)/g, //注意不要写成 /\.css$/g

cssProcessor: require("cssnano"),

cssProcessorOptions: {

discardComments: { removeAll: true },

safe: true,

autoprefixer: false

},

canPrint: true

})

]

},

node: {

setImmediate: false,

dgram: "empty",

fs: "empty",

net: "empty",

tls: "empty",

child_process: "empty"

}

};

在目录根目录下创建 .babelrc 文件,并添加如下代码:

{

"presets": [

["@babel/preset-env", {

"modules": false,

长发在船头舞蹈
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
react-code-preview:React的代码编辑预览
04-12
React代码预览 React的代码编辑预览。 预览演示: : 文档中经常有很多示例代码。 我们希望您可以在阅读文档时运行示例代码来查看渲染界面。 安装 npm install @uiw/react-code-preview --save 用法 import React from 'react' ; import { Button } from 'uiw' ; import CodePreview from '@uiw/react-code-preview' ; const code = `import { Button, Divider, Icon } from 'uiw'; ReactDOM.render( <div> <Button type="primary">主要按钮</Button> <Button type="success">成功按钮</Butt
html5读取umd,JS通用模块模式 UMD
weixin_30431445的博客
06-26 963
历史JS诞生之初面向简单页面开发, 没有模块的概念。后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块;之前也有雅虎的实践,使用命名空间 作为模块名。最后衍生出 面向各种使用场景 的 JS 模块标准。例如:面向浏览器的 AMD面向Nodejs的 CommonJS对于这种分裂状态ES标准也在尽力弥合。 但是目前流行的实践是 UMD模式。AMDhttps://www.davidbcal...
探索React UMD Demo:一个高效、易用的前端开发模板
最新发布
gitblog_00096的博客
04-07 357
探索React UMD Demo:一个高效、易用的前端开发模板 项目地址:https://gitcode.com/qxtang/react-umd-demo 该项目[1]是一个基于ReactUMD(Universal Module Definition)的演示示例,旨在帮助开发者快速理解并启动React应用的UMD构建流程。UMD是一种使得JavaScript模块在AMD、CommonJS和全局...
vue3 组件打包成umdes格式
码农的专栏
07-24 4676
二、修改package.json。一、新建build.js。
前端工程化:CommonJS、AMD、CMD、UMDES Modules的区别
lee前端技术站
08-19 5068
前端工程化思想一直以来都是一个非常热议的话题,其实前端工程化从技术方面来说,无非就是这么几点:CommonJS、AMD、CMD、UMDES6 Modules,那么我们就来说说前端这几个模块。 1、CommonJS 说到CommonJS,那就的从他的出发点说起了,commonjs的出发点是js没有完善的模块系统。标准较少,缺少包管理工具,而在node.js兴起之后。能让js在任何地方运行,特别是服务端,也能具备开发大型项目的能力,所以commonjs也就应用而生了。node.js是commonjs的最
前端模块化( CommonJS、AMD、CMD、UMDES Module) 详解
webjhh的博客
01-29 736
1.CommonJS CommonJS是2009年社区提出的最早的模块标准 Node.js采用的是CommonJS标准的一部分,并在此基础上做了一些变化。 申明方式 modele.exports.name = 'hello word';   module.exports.sayHello = function() {    console.log('Hello ');   }; exports 是与外界联系的桥梁不可以直接复制,以下为错误方式   module.exports = {  
html css marked.umd.js 中 给table添加父元素div 使table自适应滚动 拥有 overflow = auto
withyzu
07-06 222
html css marked.umd.js 中 给table添加父元素div 使table自适应滚动 拥有 overflow = auto
umd-lib:一个使用 UMD 的小模块,同时公开 AMD 和 CommonJS 接口
06-24
umd-lib 只是一个使用 UMD 的小模块,它公开了 AMD 和 CommonJS 接口。 我们正在使用 browserify 将这个非常小的和他的依赖项捆绑到一个同时公开 AMD 和 CommonJS 的 bundle.js 中。 这是我们用于创建包的命令: ...
moduloze:将CommonJS(CJS)模块转换为UMDESM格式
03-12
Moduloze支持以Node.js生态系统固有的CommonJS(CJS)格式创作JS模块,并将这些模块转换为通用模块定义(UMD)和ES模块(ESM)格式。 UMD在尚未在应用程序中使用ESM的浏览器中特别有用。 CJS可以在所有版本的Node上...
react-address-book:由React,Webpack和CommonJS制成的地址簿前端组件
05-26
React通讯录具有验证,i18n和多个国家/地区支持的简单地址CRUD。用法看一下 。延迟补偿该组件支持使用延迟补偿方法来更改数据。 这意味着,如果用户提出的任何更改(例如,选择地址,更新地址,创建地址)都通过了...
cjs2esm:将使用CommonJS的项目转换为ES模块
03-07
CJS 2 ESM 将使用CommonJS的项目转换为ES模块。 :memo: 介绍如果您想知道我为什么要构建此文件,请转到“部分。 您可以使用此工具将使用CommonJS的项目转换为ES Modules,并将其准备好用于Node v14 ,具有ESM支持的...
welsonjs:WelsonJS-使用基于WSHHTA(wsh.js),GTKGladeXMLJavaScript,HTML和CSS构建Windows桌面应用程序
04-27
韦尔森斯 WelsonJS-使用基于WSH / HTA(wsh.js),GTK / GladeXMLJavaScript... module.exports ,CommonJSUMD兼容性 NPM兼容性 立即可以在Windows计算机上使用。 无需安装其他软件。 包含的 lib / std(标准
一文搞懂amd,cmd,cjs,umd,es
cpa0701的博客
09-21 3093
1.AMD-异步模块定义 AMD是RequireJS在推广过程中对模块定义的规范化产出,它是一个概念,RequireJS是对这个概念的实现,就好比JavaScript语言是对ECMAScript规范的实现。AMD是一个组织,RequireJS是在这个组织下自定义的一套脚本语言 RequireJS:是一个AMD框架,可以异步加载JS文件,按照模块加载方法,通过define()函数定义,第一个参数是一个数组,里面定义一些需要依赖的包,第二个参数是一个回调函数,通过变量来引用模块里面的方法,最后通过return
Commonjs、Amd、Cmd、UmdEsMoudle
weixin_45380966的博客
12-15 472
1.commonjs主要针对服务端,amd、cmd和esmodule主要针对浏览器端2.amd和cmd都是异步加载,但是amd是预加载(加载某个模块前,会先将依赖模块加载完成),cmd则是懒加载,虽然一开始就异步加载好js文件,但是不会执行,而在需要的时候才执行3.amd虽然是异步加载,但是加载顺序不一定,会导致出现一些问题。cmd只有在使用的时候才执行js,所以是可控的,但是js执行是同步的,所以在执行大文件的时候等待时间会很长4.umd是amd和commonjs的糅合。
CJS, AMD, UMD,ESM 简洁解释
坚信万物皆可切的切图仔
09-03 3587
前言: CJS、AMD、UMDESM都是给 Javascript 添加模块化的方法,还有其他方法,但这些是比较通用的。什么?你不知道什么叫模块化?那你肯定写过import * from ''吧,这就已经使用了模块化的技术思想。 ESM (ES 模块, 前端常用*) ESM 代表 ES 模块。这是 Javascript 提出的实现一个标准模块系统的方案。我相信你们很多人都看到过这个: import React from 'react'; 复制代码 或者其他更多的 import {foo, b
JS & Node 模块化解释:AMD、UMDCommonJSESM
cookcyq__的博客
07-08 1580
AMD就是为了解决命名污染而研发的,同时还支持按需加载,是第一个引入模块化开发的规范插件,要想使用AMD语法得借助一款插件RequireJS。注意,AMD 只适用于浏览器,虽然也支持 Node,但不如 Node 自家的 CJS,后面会讲。CommonJS也常被称为CJS,与ADMI一样属于模块化语法,不过它是用来兼容后端Nodejs语言,庆幸的是,CJS在 Node.js 中已内置,开箱即用,无需引入插件。UMD是AMDCommonJS
html5读取umd,UMDCommonJSES Module、AMD、CMD模块的写法
weixin_42314192的博客
06-26 362
AMD异步模块规范RequireJS就是AMD的一个典型的实现。以下是一个只依赖与jQuery的模块代码:// foo.jsdefine(['jquery'], function($){function myFunc(){};// 暴露公共方法return myFunc;})12345678910// foo.jsdefine(['jquery'],function($){functionmyFu...
html 将代码模块化,JavaScript——前端模块化开发
weixin_30074929的博客
06-10 557
一、前端模块化规范 二、CommonJS1、CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}1.1、require():用来引入外部模块;1.2、exports:对象用于导出当前模块的方法或变量,唯一的导出口;1.3、module:对象就代表模块本身。2、NodeJS中使用CommonJS模块管理2.1、模块定义:根据co...
前端模块化——彻底搞懂AMD、CMD、UMDESM和CommonJS
zzy7075的专栏
02-04 587
UMD是AMD和CommonJS的一个糅合。AMD是浏览器优先,异步加载;CommonJS是服务器优先,同步加载。既然要通用,怎么办呢?那就先判断是否支持node.js的模块,存在就使用node.js;再判断是否支持AMD(define是否存在),存在则使用AMD的方式加载。这就是所谓的UMD
vite 进行组件打包,分别生成 esumd和unpkg多个引入方式,其中es需要将jsx转为js文件,并实现按需引入功能
07-08
使用Vite进行组件打包,生成ESUMD和UNPKG多个引入方式,并实现按需引入功能是可行的。以下是一种可能的实现方式: 首先,确保你已经在项目中安装了Vite和相关的插件: ```bash npm install vite @vitejs/...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • mysql smallint范围_mysql中的int smallint 取值范围 9899
  • 怎么判断日出时间早晚_怎样知道当地每天几点日出? 5698
  • 用MySQL表示学号_java习题:在MySQL数据库建立一个学生信息表(学号,姓名,班级,成绩),编程完成如下操作... 3262
  • 新益华系统怎样安装_教你在新电脑上重新安装系统 3233
  • 河南太康一高高考成绩查询2021,太康一高 2020年高考捷报:清华、北大录取人数有望突破两位数……... 3171

大家在看

  • 基于VSCode和MinGW-w64搭建LVGL模拟开发环境 4
  • Java毕业设计-基于springboot开发的体育馆管理系统设计与实现-毕业论文(附毕设源代码) 491
  • 力扣 面试题17.04.消失的数字
  • Midjourney入门:初学者指南——AIGC绘画基础
  • AIGC绘画设计—揭秘Midjourney关键词魔法:让你的AI绘画瞬间起飞

最新文章

  • 称为web服务器页面文件,web服务器60647.doc
  • 系统扫描服务器,服务器操作系统扫描
  • 金蝶kis系统连接服务器,金蝶kis专业版如何设置连接服务器
2021年151篇
2020年12篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司黑河百度竞价推荐肇庆网站搭建多少钱武威关键词按天扣费报价桂林SEO按天扣费报价荆门外贸网站制作哪家好天门SEO按天计费报价贵阳网站推广系统价格坪山网站优化公司西安关键词按天收费哪家好黄山网站搜索优化公司广州模板制作多少钱阿里百度seo推荐广元百搜标王哪家好南京如何制作网站哪家好兰州优秀网站设计价格巢湖网站建设报价毕节网站排名优化报价宜宾网站搭建哪家好娄底品牌网站设计推荐大鹏建网站报价大理seo报价成都网站改版公司德宏百度爱采购垦利网站优化推广哪家好佛山百度关键词包年推广永新模板推广推荐渭南优秀网站设计多少钱淮北模板推广多少钱郑州网站seo优化那曲seo价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化