Слияние кода завершено, страница обновится автоматически
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>笔记</title>
<link rel="stylesheet" href="./src/other/github-markdown.css">
<link rel="stylesheet" href="./src/other/atom-one-dark.css">
<script src="./src/other/highlight.pack.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<style>
.markdown-body {
box-sizing: border-box;
min-width: 200px;
max-width: 980px;
margin: 0 auto;
padding: 45px;
}
</style>
</head>
<body>
<article class="markdown-body">
<h1 id="webpack-react-learning">webpack react learning</h1>
<h2 id="-">项目结构搭建</h2>
<h2 id="webpack-">webpack配置文件</h2>
<ol>
<li><p>安装webpack</p>
<pre><code> npm install webpack -g #全局安装
npm install webpack --save-dev #项目内安装
</code></pre></li>
<li><p>配置入口文件</p>
<pre><code> var path = require('path');
module.exports = {
// 入口文件
entry: path.resolve(__dirname, 'src/js/app.js'),
// 输出文件
output: {
// 输出至哪个文件夹
path: path.resolve(__dirname, 'dist'),
// 输出的文件名
filename: 'bundle.js'
}
}
</code></pre></li>
<li><p>运行项目</p>
<pre><code> webpack --config webpack.develop.config.js
</code></pre></li>
</ol>
<h2 id="-package-json-">使用package.json改造配置文件</h2>
<ul>
<li><p>方便启动项目,可以在package.json 中添加脚本</p>
<pre><code> "scripts": {
"develop": "webpack --config webpack.develop.config.js",
"publish": "webpack --config webpack.publish.config.js"
}
</code></pre></li>
<li><p>运行项目</p>
<pre><code> npm run develop
</code></pre></li>
</ul>
<h2 id="-webpack-dev-server-">使用webpack-dev-server实现浏览器自动刷新</h2>
<ol>
<li><p>安装webpack-dev-server</p>
<pre><code> npm install webpack-dev-server --save-dev
</code></pre></li>
<li><p>修改package.json中配置文件</p>
<pre><code> "develop": "webpack-dev-server --config webpack.develop.config.js --devtool eval-source-map --progress --colors --inline --hot --content-base ./dist",
</code></pre></li>
<li><p>使用npm运行项目</p>
<pre><code> npm run develop
</code></pre></li>
<li><p>此时更改代码后,项目会自动构建, 浏览器也会自动刷新</p>
</li>
</ol>
<h2 id="react-react-dom-babel-loader-">react&&react-dom以及babel-loader的使用</h2>
<ol>
<li><p>安装react 和 react-dom</p>
<pre><code> npm install react react-dom --save
</code></pre></li>
<li><p>安装babel-loader以及相关依赖</p>
<pre><code> npm install babel-loader --save-dev
npm install babel-core babel-preset-es2015 babel-preset-react --save-dev
</code></pre></li>
<li><p>修改webpack.develop配置文件</p>
<pre><code> module: {
rules: [{
test: /\.jsx?$/,
use: [{
loader: 'babel-loader',
options: {
presets: ['es2015', 'react']
}
}]
}]
}
</code></pre></li>
<li><p>app.js中书写react代码</p>
<pre><code> // 引入React
import React, { Component } from 'react'
// 引入ReactDOM
import ReactDOM from 'react-dom'
// 使用ReactDOM渲染html节点
ReactDOM.render(
<div>
hello world
</div>,
document.getElementById('app')
)
</code></pre></li>
<li><p>dist目录下index.html中引入bundle.js,并且加入一个id为app的div</p>
</li>
<li><p>修改了配置文件需要重新手动构建项目</p>
<pre><code> npm run develop
</code></pre></li>
</ol>
<h2 id="css-loader-style-loader-">css-loader&&style-loader的使用</h2>
<ol>
<li><p>安装</p>
<pre><code> npm install css-loader style-loader --save-dev
</code></pre></li>
<li><p>修改配置文件</p>
<pre><code> rules: [{
test: /\.jsx?$/,
use: [{
loader: 'babel-loader',
options: {
presets: ['es2015', 'react']
}
}]
}, {
test: /\.css$/,
// 注意:必须先写style-loader再写css-loader
loader: 'style-loader!css-loader'
// 下面这种写法也可以
// use: ['style-loader', 'css-loader']
}]
</code></pre></li>
<li><p>书写CSS文件,并在js或jsx文件中引入CSS文件</p>
</li>
<li><p>重新构建</p>
<pre><code> npm run develop
</code></pre></li>
</ol>
<h2 id="sass-loader-">sass-loader的使用</h2>
<ol>
<li><p>安装sass-loader</p>
<pre><code> // sass-loader的使用需要安装node-sass
npm install node-sass --save
npm install sass-loader --save-dev
</code></pre></li>
<li><p>添加配置文件</p>
<pre><code> // 处理js中引用sass文件
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader']
}
</code></pre></li>
<li><p>书写sass文件</p>
</li>
</ol>
<h2 id="url-loader-">url-loader的使用</h2>
<ol>
<li><p>安装url-loader和file-loader</p>
<pre><code> npm install url-loader file-loader -save-dev
</code></pre></li>
<li><p>添加配置文件</p>
<pre><code> // 处理图片操作
{
test: /\.(png|jpg|jpeg|gif)$/,
use: 'url-loader?limit=25000'
},
// 处理iconfont
{
test: /\.(eot|woff|ttf|woff2|svg)$/,
use: 'url-loader?limit=2500'
}
</code></pre></li>
<li><p>引用图片文件</p>
</li>
</ol>
<h2 id="webpack-">webpack 发布策略</h2>
<h3 id="-">修改配置文件</h3>
<ol>
<li><p>将webpack.develop.config.js中的配置拷贝到webpack.publish.config.js中</p>
</li>
<li><p>新建一个.bablerc文件,添加如下内容,同时去除webpack.publish.config.js中和此相关的配置</p>
<pre><code> {
"presets":["es2015","react"]
}
</code></pre></li>
<li><p>修改url-loader中相关配置</p>
<pre><code> // 处理图片操作
{
test: /\.(png|jpg|jpeg|gif)$/,
use: 'url-loader?limit=25000&name=images/[name].[ext]'
// 构建时会构建一个images文件夹存放图片
},
// 处理iconfont
{
test: /\.(eot|woff|ttf|woff2|svg)$/,
use: 'url-loader?limit=2500&name=fonts/[name].[ext]'
// 构建时会构建一个fonts文件夹存放icon
}
</code></pre></li>
</ol>
<h3 id="-">分离第三方包</h3>
<ol>
<li><p>修改入口文件</p>
<pre><code> // 分离第三方包后的入口文件
entry:{
app:path.resolve(__dirname, 'src/js/app.js'),
// 需要分离的第三方包名写在数组中
vendors:['react','react-dom']
},
</code></pre></li>
<li><p>增加插件</p>
<pre><code> plugins:[
// 分离第三方包插件
new webpack.optimize.CommonsChunkPlugin({name:'vendors',filename:'vendors.js'})
]
</code></pre></li>
<li><p>在index.html中引入vendors.js</p>
</li>
<li><p>运行npm run publish会看到一个vendors.js被生成</p>
</li>
</ol>
</article>
</body>
</html>
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )