重温 Webpack, Babel 和 React
开始之前在书写文章之前,我假设大家已经有了 最终实现的效果我们将使用 我们创建的应用程序既要做到 初始化创建你的项目,并添加的你的配置文件 mkdir webpack-babel-react-revisited cd webpack-babel-react-revisited yarn init Webpack我们首先安装 yarn add webpack --dev 接下来,我们开始书写一些模块。我们将源文件 /** app.js */ console.log('Hello from 枫上雾棋!'); 然后,我们跑一下 ./node_modules/webpack/bin/webpack.js ./src/app.js --output-filename ./dist/app.bundle.js 如果你打开生成的 这条指令是将我们的 ├── config │ ├── paths.js │ ├── webpack.config.prod.js ├── src │ ├── app.js ├── package.json 下面是参考
const path = require('path'); const fs = require('fs'); const appDirectory = fs.realpathSync(process.cwd()); const resolveApp = relativePath => path.resolve(appDirectory,relativePath); module.exports = { appDist: resolveApp('dist'),appSrc: resolveApp('src'),}; 这个文件不是必须的,但在项目增大后,它的意义就瞬间出来了
const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const paths = require('./paths'); const plugins = [ new HtmlWebpackPlugin({ title: 'webpack babel react revisited',filename: path.join(paths.appDist,'index.html'),}),]; const config = { entry: { app: path.join(paths.appSrc,'app'),},output: { path: paths.appDist,filename: 'assets/js/[name].js',resolve: { extensions: ['.js','.jsx'],plugins,}; module.exports = config; 这里我们还添加了一个 html-webpack-plugin,它简化了我们 其中,我们还使用了一个 接下来,我们指定配置文件再跑一下 ./node_modules/webpack/bin/webpack.js --config config/webpack.config.prod.js 发现除了实现上面的效果外,还自动帮我们生成了一个 当然,最后我们肯定也不是使用这种方式来 "scripts": { "clean": "rimraf dist *.log .DS_Store","build": "yarn run clean && webpack --config config/webpack.config.prod.js --progress" } Webpack dev server除此之外, 首先,安装 yarn add --dev webpack-dev-server 在 const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const OpenBrowserPlugin = require('open-browser-webpack-plugin'); const paths = require('./paths'); const hostname = process.env.HOST || 'localhost'; const port = process.env.PORT || 3000; const plugins = [ new HtmlWebpackPlugin({ title: 'webpack babel react revisited',new OpenBrowserPlugin({ url: `http://${hostname}:${port}` }),devServer: { contentBase: paths.appDist,compress: true,port,}; module.exports = config; 在 更新 "scripts": { "clean": "rimraf dist *.log .DS_Store","webpack:dev": "NODE_ENV=development webpack-dev-server --config config/webpack.config.dev.js --progress","webpack:prod": "NODE_ENV=production webpack --config config/webpack.config.prod.js --progress","start": "yarn run clean && yarn run webpack:dev","build": "yarn run clean && yarn run webpack:prod" } 现在,我们就可以通过如下方式来启动 yarn start 启动后,有没有瞬间感觉很棒 Babel为了能够使用 所有,我们安装下面这些依赖包 yarn add --dev babel-loader babel-core babel-preset-env babel-preset-react 创建 { "presets": ["env","react"] } 这个是告诉 接下来,更新 config.module = { rules: [ { test: /.(js|jsx)$/,exclude: /node_modules/,use: ['babel-loader'],],} 更新以后,虽然看不到什么变化,但事实上我们可以使用 React最后,我们来添加 首先,我们还是先安装它 yarn add react react-dom 用下面代码替换 import React,{ Component } from 'react'; import { render } from 'react-dom'; export default class Hello extends Component { render() { return <h1>Hello from 枫上雾棋!</h1>; } } render(<Hello />,document.getElementById('app')); 因为要添加 new HtmlWebpackPlugin({ template: path.join(paths.appSrc, 参考 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"> <title>webpack babel react revisited</title> </head> <body> <noscript> You need to enable JavaScript to run this app. </noscript> <div id="app"></div> </body> </html> 接下来,就是见证奇迹的时刻 重新启动服务,你有没有发现搭建一个 接下里,大家就可以 下面再补充一下如何添加 CSS每个 web 应用程序都离不开 body,html,#app { margin: 0; width: 100%; height: 100%; } #app { padding: 30px; font-family: '微软雅黑'; } 将其添加到应用程序中我们需要使用 css-loader 如果想将 我们使用 extract-text-webpack-plugin 将其解压到外部 为此,我们首先安装 yarn add --dev css-loader style-loader extract-text-webpack-plugin 然后在 import './style.css'; 最后更新 config.module = { rules: [ { test: /.css$/,use: ExtractTextPlugin.extract({ fallback: 'style-loader',use: 'css-loader',} config.plugins.push([ new ExtractTextPlugin("styles.css"),]) 看起来稍显复杂,但是大功告成,为了更好地使用它,我们都得经历这个过程 重新启动服务,你会发现你的 图片最后我们增加 file-loader 来处理我们引入的图片等文件 首先,安装 yarn add --dev file-loader 我们在 import avatar from './images/avatar.jpg'; export default class Hello extends Component { render() { return ( <div> <img src={avatar} alt="avatar" style={{ width: 400,height: 250 }} /> </div> ); } } 更新 config.module = { rules: [ { test: /.(png|jpg|gif)$/,use: [ { loader: 'file-loader',options: { name: '[name].[ext]',outputPath: 'assets/images/',} 重启服务,哈哈 总结如果有什么问题,可以查看 webpack-babel-react-revisited 仓库 现在,大家对搭建 原文链接:Setting up Webpack,Babel and React from scratch,revisited (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |