5分钟带你走进webpack
5分钟带你走进webpack
- webpack
- 开始表演(哇卡卡)
- React & Webpack
- 布置项目
- 初始化项目
- 安装我们的环境
- 添加TypeScript配置文件
- 写一些代码
- 创建一个webpack配置文件
- 把它们放在一起
- 代码下载:
- 参考资料:
webpack
官网:https://www.webpackjs.com/
Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源。
开始表演(哇卡卡)
React & Webpack
本教程将会教你怎样用 React 和 webpack 写 TypeScript.
如果你要创建一个新项目,请查看 React 入门指南.
在这里,我们假设你已经安装了Node.js 和 npm.
具体安装步骤自行百度.
布置项目
我们从一个新项目开始,我们将其命名为 project, 其实你可以命名为其他任何名字.
mkdir project
cd project
首先,我们将按以下方式构建项目:
project/
├─ dist/
└─ src/
└─ components/
TypeScript 文件将从您的 src
文件夹开始,通过 TypeScript
编译器运行,然后运行webpack,最后进入文件dist
下的bundle.js
. 我们编写的任何组件都将放在该src/components
文件夹中。
让我们布置基本的文件:
mkdir src
cd src
mkdir components
cd …
Webpack最终将为我们生成 dist
目录。
初始化项目
现在我们将把这个文件夹变成一个npm包。
npm init
您将获得一系列提示,但您可以随意使用默认值。您可以随时返回并在为您生成的package.json
文件中更改这些内容。
安装我们的环境
首先确保全局安装Webpack。
npm install -g webpack
Webpack是一个将代码和可选的所有依赖项捆绑到一个.js
文件中的工具。
现在让我们将 React 和 React-DOM 及其声明文件作为依赖项添加到您的package.json
文件中:
npm install --save react react-dom @types/react @types/react-dom
该@types/
前缀意味着我们还想获取 React 和 React-DOM的声明文件。通常在导入类似路径时 "react"
,它会查看react
包本身的内部; 但是,并非所有包都包含声明文件,因此 TypeScript 也会在@types/react
包中查找。你会发现我们以后甚至不必考虑这个问题。
接下来,我们将在 awesome-typescript-loader 和 source-map-loader 上添加开发时依赖项。
npm install --save-dev typescript awesome-typescript-loader source-map-loader
这两种依赖关系都可以让 TypeScript 和 webpack 很好地协同工作。awesome-typescript-loader 使用TypeScript 的标准配置文件帮助 Webpack 编译TypeScript代码tsconfig.json
。source-map-loader使用TypeScript 的任何源映射输出,在生成自己的源映射时通知webpack。这将允许您调试最终输出文件,就像调试原始 TypeScript 源代码一样。
请注意,awesome-typescript-loader不是typescript的唯一加载器。你可以改用 ts-loader。在 这里 阅读它们之间的差异.
请注意,我们将TypeScript安装为开发依赖项。我们也可以将TypeScript链接到全局副本npm link typescript
,但这是一种不太常见的情况。
添加TypeScript配置文件
您需要将TypeScript文件放在一起 - 您要编写的代码以及任何必要的声明文件。
为此,您需要创建一个tsconfig.json
包含输入文件列表以及所有编译设置的列表。只需在项目根目录中创建一个新文件,tsconfig.json
并使用以下内容填充它:
{"compilerOptions": {"outDir": "./dist/","sourceMap": true,"noImplicitAny": true,"module": "commonjs","target": "es6","jsx": "react"},"include": ["./src/**/*"]
}
您可以在 此处 详细了解tsconfig.json
文件。
写一些代码
让我们使用React编写我们的第一个TypeScript文件。首先,在src/components
文件下创建一个Hello.tsx文件,写入以下内容:
import * as React from "react";export interface HelloProps { compiler: string; framework: string; }export const Hello = (props: HelloProps) => <h1>Hello from {props.compiler} and {props.framework}!</h1>;
请注意,虽然此示例使用无 状态功能组件,但我们也可以使我们的示例更具有一些类别。
import * as React from "react";export interface HelloProps { compiler: string; framework: string; }// 'HelloProps' describes the shape of props.
// State is never set so we use the '{}' type.
export class Hello extends React.Component<HelloProps, {}> {render() {return <h1>Hello from {this.props.compiler} and {this.props.framework}!</h1>;}
}
接下来,让我们使在文件夹src
下创建一个·index.tsx·文件:
import * as React from "react";
import * as ReactDOM from "react-dom";import { Hello } from "./components/Hello";ReactDOM.render(<Hello compiler="TypeScript" framework="React" />,document.getElementById("example")
);
我们仅仅将Hell
组件导入index.tsx
。请注意,不像"react"
或者"react-dom"
,我们使用相对路径来Hello.tsx
-这是很重要的。如果我们不这样做,TypeScript将尝试查看我们的node_modules文件夹。
我们还需要一个页面来显示我们的Hello
组件。使用以下内容在根目录下创建文件index.html
:
<!DOCTYPE html>
<html><head><meta charset="UTF-8" /><title>Hello React!</title></head><body><div id="example"></div><!-- Dependencies --><script src="./node_modules/react/umd/react.development.js"></script><script src="./node_modules/react-dom/umd/react-dom.development.js"></script><!-- Main --><script src="./dist/bundle.js"></script></body>
</html>
请注意,我们从内部包含文件node_modules
。React和React-DOM的npm软件包包括.js
可以包含在网页中的独立文件,我们直接引用它们以使事情变得更快。您可以随意将这些文件复制到另一个目录,或者将它们托管在内容分发网络(CDN)上。Facebook使CDN托管版本的React可用,你可以在这里相关信息。
创建一个webpack配置文件
在项目目录的根目录下创建一个webpack.config.js
文件。
module.exports = {entry: "./src/index.tsx",output: {filename: "bundle.js",path: __dirname + "/dist"},// Enable sourcemaps for debugging webpack's output.devtool: "source-map",resolve: {// Add '.ts' and '.tsx' as resolvable extensions.extensions: [".ts", ".tsx", ".js", ".json"]},module: {rules: [// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.{ test: /\.tsx?$/, loader: "awesome-typescript-loader" },// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }]},// When importing a module whose path matches one of the following, just// assume a corresponding global variable exists and use that instead.// This is important because it allows us to avoid bundling all of our// dependencies, which allows browsers to cache those libraries between builds.externals: {"react": "React","react-dom": "ReactDOM"}
};
你可能想知道那个externals
领域。我们希望避免将所有React捆绑到同一个文件中,因为这会增加编译时间,如果库没有更改,浏览器通常可以缓存库。
理想情况下,我们只是从浏览器中导入React模块,但大多数浏览器仍然不支持模块。相反,库传统上使用单个全局变量(如jQuery或)来使自己可用_。这称为“命名空间模式”,webpack允许我们继续利用以这种方式编写的库。通过我们的输入"react": "React"
,webpack将发挥其魔力,"react"
从React变量中进行任何负载导入。
您可以在此处了解有关配置webpack 的更多信息。
把它们放在一起
运行下面命令:
webpack
会提示你安装 webpack-cli
,直接选择安装依然会报错,因为webpack是全局安装的,所以这里的webpack-cli
也要全局安装,选择no
,然后运行下面的命令进行全局安装。
npm install --save-dev webpack-cli -g
再次运行
webpack
依然会报错,提示:
Error: Cannot find module ‘webpack’
然后运行
npm link wepack --save-dev
因为webpack为全局安装,需要将其连接到webpack,就会解决Cannot find module ‘webpack’
.
现在index.html在您最喜爱的浏览器中打开,一切都准备就绪!你应该看到一个页面上写着“来自TypeScript和React的Hello!”
代码下载:
https://github.com/kankanol1/kankan-webpack
参考资料:
https://www.typescriptlang.org/
奇卡奇卡 哈哈哈hia hia 哈哈哈
明天的你一定会感谢现在拼命的自己!
5分钟带你走进webpack相关推荐
- 大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)
大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5) 上一节中,我们讲 ...
- 大白话5分钟带你走进人工智能-第十二节梯度下降之背后的原理之泰勒公式(7)
大白话5分钟带你走进人工智能-第十二节梯度下降之背后的原理之泰勒公式(7) 我们接下来给大家深化一下,梯度下降背后到底是什么原理?谈 ...
- 大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out of bag data及代码(2)
大白话5分钟带你走进人工智能-第二十九节集成学习之随机森林随机方式 ,out of bag data及代码(2) 上一节中我们讲解了随机森林的基本概念,本节的话我们讲解随机森 ...
- DOTA2怎么清除缓存_5分钟带你走进mybatis缓存
前言 为什么要缓存 MyBatis缓存 一级缓存 二级缓存 二级缓存应该开启吗 自定义缓存 总结 前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如 ...
- 大白话5分钟带你走进人工智能-第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6)...
第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6) 我们回忆一下,之前咱们讲什么了?梯度下降,那么梯度下降是一种什么算法呢?函数最优化 ...
- 大白话5分钟带你走进人工智能-第十节梯度下降之归一化的各种方式和必要性(5)...
第十节梯度下降之归一化的各种方式和必要性(5) 上一节中我们讲解了梯度下降的函数最优化算法和梯度下降代码过程,了解了梯度下降的代码实现过程,本节的话我们讲解一个 ...
- 大白话5分钟带你走进人工智能-第二十六节决策树系列之Cart回归树及其参数(5)...
第二十六节决策树系列之Cart回归树及其参数(5) 上一节我们讲了不同的决策树对应的计算纯度的计算方法, ...
- 大白话5分钟带你走进人工智能-第31节集成学习之最通俗理解GBDT原理和过程
目录 1.前述 2.向量空间的梯度下降: 3.函数空间的梯度下降: 4.梯度下降的流程: 5.在向量空间的梯度下降和在函数空间的梯度下降有什么区别呢? 6.我们看下GBDT的流程图解: 7.我们看一个 ...
- 大白话5分钟带你走进人工智能-第七节梯度下降之梯度概念和梯度迭代过程(2)
第七节梯度下降之梯度概念和梯度迭代过程(2) 上一节中针对一元函数,找到了一个看起来还不错的一种寻求数值上的最小值的这种方式.大致是这么一个流程,F(w)和F'(w),上来先瞎蒙出来一组w,然后带到这 ...
最新文章
- 刚刚,阿里开源了一系列重磅技术炸弹!| 程序员必看
- 每天一道LeetCode-----一个整数序列,每个元素出现两次,只有一个(两个)出现一次,找到这个(这两个)元素
- linq 解决winForm中控件CheckedListBox操作的问题。(转载)
- Vue基础之表单控件绑定
- 软件整合--硬件整合--平台整合
- vs快速生成get set方法_怎么祛斑快速祛斑的方法是什么?Get正确的祛斑方法
- 剑指offer面试题[22]-栈的压入、弹出序列
- crontab关于 >/dev/null 2>1输出重定向问题
- 【超图+CESIUM】【基础API使用示例】28、超图|CESIUM -【坐标转换】世界坐标转经纬度
- CentOS7各个版本镜像下载地址及说明、Everything版
- 柱状图柱子上面显示数字
- 抖音互关源码 E4A源码含数据库后台程序搭建可用
- 破解指纹打卡机 考勤机
- 添加IIS FTP站点密码
- python中-是什么意思
- 靠本事整塌,靠苦逼重搭
- getTime()方法在苹果系统的bug
- 针对场景化痛点,锐捷网络推出极简光 2.X,以太全光网再下一城
- 职场关注:挣百万年薪的15种能力
- 详解SYN Flood攻击原理与防范
热门文章
- 关于发布后网站调用本地exe的曲线救国之路
- IO系列学习总结六:拜读Netty 4.x版本官网,熟悉官网discard protocol time protocol
- 大数据重新定义未来,2018 中国大数据技术大会(BDTC)豪华盛宴抢先看!
- mysql over rank_sql - MySQL中的Rank函数
- php网页可视化调试工具,php-xdebug调试工具
- windows下的中文文件名共享在linux下显示乱码的问题
- E. The Humanoid #834 div3
- 基于心理旋转的视线诱导设施优化及应用案例分析
- Kaggle Video Game Sales数据分析
- 用计算机来画出整个方格图,怎么画小学数学中的方格图