本文的源码在这里下载 https://github.com/tianxiangbing/webpack-study 或者使用这个种子项目 https://github.com/tianxiangbing/react-seed
reactjs今年在前端圈里很火,用了三四个月,感觉确实很适合前端开发人员使用,值得深入一下,所以这里记录一下我简单的学习过程,首先是react的环境,由于现在react的新版本已经很稳定了,所以推荐使用es6+webpack来搭建开发环境。
首先,安装nodejs,略过,安装gitbrach,略过,直接搜索到相对应软件的官网,下载最新正式版本的软件,然后就下一步下一步完成安装就可以了,很简单的过程,但是不容忽略,如有问题,可以问我。
然后就是安装webpack和一些依赖组件,便于打包,比如,在你的项目文件夹里执行
npm init
然后就是一直回车,新建一个 package.json 的文件,然后添加如下的代码进去:
"devDependencies": {
"babel-core": "^6.7.7",
"babel-loader": "^6.2.4",
"babel-preset-es2015": "^6.6.0",
"babel-preset-react": "^6.5.0",
"component-ajax": "forbeslindesay/ajax",
"css-loader": "^0.23.1",
"extract-text-webpack-plugin": "^1.0.1",
"file-loader": "^0.8.5",
"html-loader": "^0.4.3",
"html-webpack-plugin": "^2.16.1",
"moment": "^2.13.0",
"node-sass": "^3.5.3",
"react": "^15.0.1",
"react-cookie": "^0.4.6",
"react-dom": "^15.0.1",
"react-helmet": "^3.1.0",
"react-router": "^2.4.0",
"sass-loader": "^3.2.0",
"style-loader": "^0.13.1",
"url-loader": "^0.5.7",
"webpack": "^1.13.0",
"webpack-dev-server": "^1.14.1"
}
有些不是必须的,但建议都加上,以防后面还是会用到,再执行 npm install 安装这些依赖到本地,控制台测试下webpack是否安装成功:
webpack -v
如果报错了,可以尝试把webpack安装成全局的
npm install -g webpack
接下来,就是新建一个 webpack.config.js 的配置文件了,然后粘贴如下的代码进去.
var path = require("path"); var webpack = require('webpack'); var ExtractTextPlugin = require("extract-text-webpack-plugin"); console.log("+++++++++++" + process.env.NODE_ENV + "***********") var TEST = process.env.NODE_ENV == "test" || process.env.NODE_ENV == "dev"; console.log(TEST) var filename = TEST ? "[name]" : "[chunkhash:8].[name]"; console.log(filename) var extractCSS = new ExtractTextPlugin('' + filename + '.css'); //var ignoreFiles = new webpack.IgnorePlugin(new RegExp("^(jquery|react|react-dom)$")); //动态创建html var HtmlWebpackPlugin = require('html-webpack-plugin'); var htmlPlugin = new HtmlWebpackPlugin({ title: "签到", filename: '../index.html', template: "template.html" }); var modulesDirectories = ["web_modules", "node_modules", "bower_components", "app/devconfig", "app/cyconfig"]; if (process.env.NODE_ENV == "test") { modulesDirectories = ["web_modules", "node_modules", "bower_components", "app/config", "app/cyconfig"]; } var config = { entry: { app: ["./app/app.jsx"], vendor: ["react", "react-dom", 'whatwg-fetch', 'react-router'] }, output: { path: path.resolve(__dirname, "caiyun/build"), //publicPath: "/data/assets/build/", publicPath: "", filename: filename + ".js" }, resolve: { modulesDirectories: modulesDirectories, extensions: ['', '.js', '.jsx', 'css'] }, module: { loaders: [{ jsx: /\.(js|jsx)$/, exclude: /(node_modules|bower_components)/, loader: 'babel', query: { presets: ['es2015', 'react'] } }, { test: /\.(eot|woff|ttf|svg)/, loader: 'file-loader?name=[name].[ext]' }, { test: /\.scss$/, exclude: /(node_modules|bower_components)/, loader: extractCSS.extract('style-loader', 'css?!sass?includePaths[]=' + path.resolve(__dirname, 'app/scss')) }, { test: /\.css$/, loader: extractCSS.extract('style-loader', 'css?includePaths[]=' + path.resolve(__dirname, 'app/scss')) }, { test: /\.html$/, loader: "html-loader" }, { test: /\.png$/, loader: "file-loader?name=[hash:8].[name].[ext]" }] }, plugins: [ new webpack.DefinePlugin({ "process.env": { NODE_ENV: JSON.stringify("production") } }), extractCSS, //ignoreFiles new webpack.optimize.CommonsChunkPlugin("vendor", "base.js"), htmlPlugin ] }; if (process.env.NODE_ENV == "test" || process.env.NODE_ENV == "dev") { config.devtool = "source-map"; config.output.publicPath = "/"; } if (process.env.NODE_ENV == "production") { config.resolve.modulesDirectories = ["web_modules", "node_modules", "bower_components", "app/devconfig", "app/msconfig"]; config.output.path = path.resolve(__dirname, "masheng/build") } console.log(config) module.exports = config