Webpack+React入门

来自菜鸟教程
跳转至:导航、​搜索

本教程的目的是为使用 Webpack 捆绑的 React 应用程序设置开发环境。 虽然 Webpack 和其他打包程序的优点不断 比较 ,但本教程将让您开始使用 Webpack 并帮助您自己做出决定。

依赖项

如果您还没有它们,则需要安装 nodenpm。 这两个工具将允许我们通过 package.json 管理我们的依赖关系。 在根项目文件夹中,运行 npm init 并回答设置问题以设置 package.json(默认答案应该适用于大多数用户)。

此外,我们还需要用于 React 和 Webpack 的节点库以及用于转译的库。 这可以在根文件夹中使用一串命令来完成:

  • npm install --save react react-dom create-react-class webpack
  • npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react

文件结构

Webpack 从 entry 点开始工作。 从这里开始,Webpack 通过查看 importrequire 语句为程序运行所需包含的模块构建应用程序的依赖关系图。 对我们来说,index.js 将是那个入口点。 制作一个 dev 文件夹作为保存 index.js 的地方,我们将在其中进行更改。 我们还需要一个 src 文件夹供 webpack 将包输出到。

mkdir dev src && touch dev/index.js

现在我们可以用演示代码填充index.js

索引.js

var React = require('react');
var ReactDOM = require('react-dom');
var createReactClass = require('create-react-class');

var Index = createReactClass({
  render: function() {
    return (
      <div>
        <p>Webpack and React!</p>
      </div>
    );
  }
});
ReactDOM.render(<Index />, document.getElementById('app'));

索引.html

在我们继续 Webpacking 之前,我们需要加载我们的包的实际位置。 这发生在index.html应该在根目录下,代码如下:

索引.html

<html>
  <head>
    <meta charset="utf-8">
    <title>React and Webpack</title>
  </head>
  <body>
    <div id="app" />
    <script src="src/bundle.js" type="text/javascript"></script>
  </body>
</html>

文件结构现在应该如下所示:

.
├── dev
│   └── index.js
├── index.html
├── package.json
└── src

webpack.config.js

现在设置 webpack.config.js 文件。 这是 webpack 输出可用包所需的所有信息。

webpack.config.js

var webpack = require("webpack");
var path = require("path");

var DEV = path.resolve(__dirname, "dev");
var OUTPUT = path.resolve(__dirname, "src");

var config = {
  entry: {
    Index : DEV + "/index.js"
  },

  output: {
    path: OUTPUT,
    filename: "bundle.js",
  },


  module: {
    loaders: [{
      include: DEV,
      test: /\.js$/,
      exclude: /node_modules/,
      loader: "babel-loader",
      query: {
        presets: ['es2015', 'react']
      }
    },
    ]
  }

};

module.exports = config;

entry 告诉 Webpack 从哪里开始, loaders 告诉 Webpack 如何处理该文件扩展名以及如何处理它, output 指示在何处以及如何编写捆。

包装

现在我们已经准备好了一切,我们应该能够看到我们的应用程序正在运行。 运行 ./node_modules/.bin/webpack --watch,几秒钟后你应该会看到如下内容:

➜  demo ./node_modules/.bin/webpack --watch   

Webpack is watching the files…

Hash: 1594ffb6ae2044c83abe
Version: webpack 3.7.1
Time: 1477ms
    Asset    Size  Chunks                    Chunk Names
bundle.js  863 kB       0  [emitted]  [big]  Index
  [15] ./dev/index.js 468 bytes {0} [built]
    + 33 hidden modules

--watch 选项为我们提供了保存刷新。 当您进行更改并保存时,在浏览器中重新加载 index.html 将自动重新加载新的更改。

此外,为编译命令制作 alias 至少可以节省一些制表符补全: alias output="./node_modules/.bin/webpack"

另一个加载器示例

这是另一个加载程序,file-loader,可用于将带有图像扩展名的文件捆绑到名为 images 的文件夹中。 您可以在此处 阅读有关 loaders 及其配置 的更多信息

...
 module: {
    loaders: [{
      include: DEV,
      test: /\.js$/,
      exclude: /node_modules/,
      loader: "babel-loader",
      query: {
        presets: ['es2015', 'react']
      }
    },
    {
      test: /\.(jpe?g|png|gif)$/i,
      loader:"file-loader",
      query:{
        name:'[name].[ext]',
        outputPath:'images/'
      }
    }
    ]
  }
...