額、備份一下老是好的css
#爲了不某些國外鏡像源安裝失敗,先設置淘寶鏡像代理 yarn config set registry https://registry.npm.taobao.org # 初始化yarn yarn init -y # 添加webpack yarn add webpack # 添加webpack插件 yarn add html-webpack-plugin yarn add webpack-dev-server yarn add extract-text-webpack-plugin # 添加webpack-loader yarn add style-loader css-loader node-sass sass-loader yarn add url-loader yarn add file-loader yarn add postcss-loader autoprefixer # 添加babel插件 yarn add babel-preset-react yarn add babel-loader babel-core # react相關 yarn add react react-dom yarn add react-router react-router-dom yarn add redux redux-thunk redux-saga react-redux yarn add react-router-redux@next history # 螞蟻金服的UI框架:Ant Design yarn add antd # 添加第三方庫 yarn add axios
配置webpack.config.jshtml
const path = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') const ExtractTextPlugin = require('extract-text-webpack-plugin') const autoprefixer = require('autoprefixer') module.exports = { entry: { main: __dirname + '/src/main.js' }, output: { path: path.resolve(__dirname, 'dist'), filename: 'assets/js/[name].js' }, devtool: 'source-map', module: { rules: [ { test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader' }, { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader', options: { limit: 10000, minetype: 'application/font-woff', }, }, { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader', options: { limit: 10000, minetype: 'application/font-woff', }, }, { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader', options: { limit: 10000, minetype: 'application/octet-stream', }, }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader', options: { limit: 10000, minetype: 'application/vnd.ms-fontobject', }, }, { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader', options: { limit: 10000, minetype: 'image/svg+xml', }, }, { test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i, loader: 'url-loader', options: { limit: 10000, }, }, { test: /\.(scss|sass|css)$/, use: ExtractTextPlugin.extract({ fallback: 'style-loader', use: [ { loader: 'css-loader' }, { loader: 'postcss-loader', options: { sourceMap: true, plugins: () => [autoprefixer({ browsers: ['iOS >= 7', 'Android >= 4.1'] })], }, }, { loader: 'sass-loader', query: { sourceMap: true } } ] }) } ] }, plugins: [ new HtmlWebpackPlugin({ title: 'my title', filename: __dirname + '/dist/index.html', template: __dirname + '/index.html', chunks: ['main'] }), new ExtractTextPlugin('assets/css/[name].css') ], devServer: { contentBase: path.join(__dirname, 'dist'), compress: true, port: 9000 } }
配置.babelrcnode
{ "presets": ["react"], "plugins": [ ["import", { "libraryName": "antd", "style": "css" }] ] }
配置package.json,加入scriptsreact
{ ... "scripts": { "build": "webpack", "dev": "webpack-dev-server" } }