项目demo地址https://github.com/aushion/webpack_reac_configjavascript
mkdir react_test
cd react_test
npm initcss
"devDependencies": { "babel-core": "^6.9.0", "babel-loader": "^6.2.4", "babel-plugin-react-transform": "^2.0.2", "babel-plugin-rewire": "^1.0.0-rc-3", "babel-plugin-transform-react-constant-elements": "^6.8.0", "babel-plugin-transform-react-inline-elements": "^6.8.0", "babel-plugin-transform-react-remove-prop-types": "^0.2.7", "babel-plugin-transform-runtime": "^6.9.0", "babel-preset-es2015": "^6.9.0", "babel-preset-node5": "^11.1.0", "babel-preset-react": "^6.5.0", "babel-preset-react-hmre": "^1.1.1", "babel-preset-stage-0": "^6.5.0", "css-loader": "^0.23.1", "eslint": "^3.1.0", "eslint-plugin-react": "^5.2.2", "jquery": "^3.1.0", "react-transform-catch-errors": "^1.0.2", "react-transform-hmr": "^1.0.4", "redbox-react": "^1.2.10", "url-loader": "^0.5.7", "webpack": "^1.13.1", "webpack-dev-server": "^1.14.1" }, "dependencies": { "react": "latest", "react-dom": "latest" }
这份文件大概有四个配置项entry, output, module, plugins.
entry:指定打包的入口文件,每有一个键值对,就是一个入口文件。
output:配置打包结果,path定义了输出的文件夹,filename则定义了打包结果文件的名称,filename里面的[name]会由entry中的键替换,例子中的/build/bundle.js即是生成的文件。
resolve:定义了解析模块路径时的配置,经常使用的就是extensions,能够用来指定模块的后缀,这样在引入模块时就不须要写后缀了,会自动补全.
module:定义了对模块的处理逻辑,这里能够用loaders定义了一系列的加载器,以及一些正则。当须要加载的文件匹配test的正则时,就会进行处理。这里咱们使用了react-hot 和 babel。babel-loader是咱们使用ES-6进行开发时用于生成JS文件。
最后咱们生成了一个style.css仅仅作个例子,告诉咱们如何引入样式文件,实际上咱们能够加载诸如sass-loader这样的加载器。
loader:对文件进行处理,这正是webpack强大的缘由。好比定义了凡是.js结尾的文件都是用babel-loader作处理,而.jsx结尾的文件会先通过jsx-loader处理,而后通过babel-loader处理。固然这些loader也须要经过npm install安装。
plugins: 这里定义了须要使用的插件,好比commonsPlugin在打包多个入口文件时会提取出公用的部分,生成common.js。html
{ "presets": ["react", "es2015"], "env": { "development": { "presets": ["react-hmre"] } } }
"start": "node server.js", //启动开发环境服务 "build": "webpack --config webpack.config.prod.js --progress --colors" //生产环境打包