大多数教程都直接抛出 webpack.config.js 的配置文件,让同学不明所以地复制粘贴。后来,找到这篇文章,大致地讲述了 webpack.config.js 中配置项的由来,还是不错的。
[TOC]
运行命令
mkdir react-hello-world
cd react-hello-world
npm init # 这个命令会在终端中不断引导用户创建
npm init -y # 这个命令直接创建一个 package.json,全部使用默认值
运行命令
# 将 Webpack 安装到本地(非全局),并将配置写入到 package.json
npm install webpack --save-dev
touch webpack.config.js
var webpack = require('webpack');
var path = require('path');
var BUILD_DIR = path.require(__dirname, 'src/client/public');
var APP_DIR = path.resolve(__dirname, 'src/client/app');
var config = {
entry: APP_DIR + '/index.jsx',
output: {
path: BUILD_DIR,
filename: 'bundle.js'
}
};
module.exports = config;
写入以下内容
console.log('hello world!');
先建立 src/client/public 文件夹
./node_modules/.bin/webpack -d
在开发模式下运行 webpack,生成 bundle.js 和它的关联文件 bundle.js.map,并输出在 src/client/public (这是在 webpack.config.js 中配置的)
可以看到 src/client/public 中生成了 bundle.js 文件
在 src/client 中创建一个 index.html,并在其中引入上面生成的 bundle.js
<html>
<head>
<meta charset="utf-8">
<title>React.js using NPM, Babel6 and Webpack</title>
</head>
<body>
<div id="app" />
<script src="public/bundle.js" type="text/javascript"></script>
</body>
</html>
最后,应该可以在控制台中看到 Hello World 的输出
npm i babel-loader babel-preset-es2015 babel-preset-react --save-dev
babel-preset-es2015 和 babel-preset-react 是 babel-loader 的插件,用于转译 ES6 和 JSX 语法
babel-loader 需要配置,来获知使用 ES6 和 JSX 插件
创建 .babelrc 文件
touch .babelrc
写入配置
{
"presets" : ["es2015", "react"]
}
// Existing Code ....
var config = {
// Existing Code ....
module : {
loaders : [
{
test : /\.jsx?/,
include : APP_DIR,
loader : 'babel-loader'
}
]
}
}
loaders 属性接受一个包含一个或多个 loader 的数组,每个 loader 对象应该提供的属性:
安装 react-dom
npm install react-dom --save-dev
更改 index.jsx,修改成这样
'use strict';
import React from 'react';
import {render} from 'react-dom';
class App extends React.Component {
render () {
return <p> Hello React!</p>;
}
}
render(<App/>, document.getElementById('app'));
运行命令
./node_modules/.bin/webpack -d
发现出错了:
Module build failed: Error: Cannot find module ‘babel-core’
需要安装 babel-core
npm install babel-core -D
其实,这里还有其他错误导致无法成功转译,因为依赖安装错地方了,重新运行一下命令
npm install react react-dom -S
现在,重新运行 webpack,应该能成功了
./node_modules/.bin/webpack -d
运行命令
./node_modules/.bin/webpack -d --watch
现在,Webpack 处于监听模式,当检测到文件变化时,将自动打包。更改完文件之后,可直接在浏览器中刷新并看到变化
若不想刷新浏览器就看到更改结果,可以使用 react-hot-loader
优化 ./node_modules/.bin/webpack 命令
更改 package.json 文件,修改 script 属性
"scripts": {
"dev": "webpack -d --watch",
"build": "webpack -p"
},
关于 Webpack 的命令选项,查看 官方文档
-S –save dependencies -D –save-dev devDependencies -O –save-optional optionalDependencies