美文网首页
React | 使用webpack构建React项目

React | 使用webpack构建React项目

作者: SEATELL海说软件 | 来源:发表于2017-12-13 14:17 被阅读0次

    配置 React 项目,需要完成的工作:

    1、编译 jsx,es6,scss 等资源

    2、自动引入静态资源到 html 页面

    3、实时编译和刷新浏览器

    4、按指定模块化规范自动包装模块

    5、自动给 css 添加浏览器内核前缀

    6、按需打包合并 js、css

    根据 webpack 文档编写最基本的 webpack 配置,直接使用 node api 的方式

    /* webpack.config.js */

    varwebpack= require('webpack');

    //辅助函数 varutils= require('./utils');

    varfullPath=utils.fullPath;

    varpickFiles=utils.pickFiles;

    //项目根路径 varROOT_PATH=fullPath('../');

    //项目源码路径 varSRC_PATH=ROOT_PATH+'/src';

    //产出路径 varDIST_PATH=ROOT_PATH+'/dist';

    //是否是开发环境 var__DEV__= process.env.NODE_ENV!=='production';

    // conf

    varalias=pickFiles({

    id:/(conf\/[^\/]+).js$/,

    pattern:SRC_PATH+'/conf/*.js'

    });

    // components

    alias= Object.assign(alias,pickFiles({

    id:/(components\/[^\/]+)/,

    pattern:SRC_PATH+'/components/*/index.js'

    }));

    // reducers

    alias= Object.assign(alias,pickFiles({

    id:/(reducers\/[^\/]+).js/,

    pattern:SRC_PATH+'/js/reducers/*'

    }));

    // actions

    alias= Object.assign(alias,pickFiles({

    id:/(actions\/[^\/]+).js/,

    pattern:SRC_PATH+'/js/actions/*'

    }));

    varconfig= {

    context:SRC_PATH,

    entry: {

    app: ['./pages/app.js']

    },

    output: {

    path:DIST_PATH,

    filename:'js/bundle.js'

    },

    module: {},

    resolve: {

    alias:alias

    },

    plugins: [

    newwebpack.DefinePlugin({

    // http://stackoverflow.com/questions/30030031/passing-environment-dependent-variables-in-webpack

    "process.env.NODE_ENV":JSON.stringify(process.env.NODE_ENV||'development')

    })

    ]

    };

    module.

    exports=config;

    /* webpack.dev.js */

    varwebpack= require('webpack');

    varWebpackDevServer= require('webpack-dev-server');

    varconfig= require('./webpack.config');

    varutils= require('./utils');

    varPORT=8080;

    varHOST=utils.getIP();

    varargs= process.argv;

    varhot=args.indexOf('--hot') > -1;

    vardeploy=args.indexOf('--deploy') > -1;

    //本地环境静态资源路径 varlocalPublicPath='http://'+HOST+':'+PORT+'/';

    config.output.publicPath=localPublicPath;

    config.entry.app.unshift('webpack-dev-server/client?'+localPublicPath);

    newWebpackDevServer(webpack(config), {

    hot:hot,

    inline:true,

    compress:true,

    stats: {

    chunks:false,

    children:false,

    colors:true

    },

    // Set this as true if you want to access dev server from arbitrary url.

    // This is handy if you are using a html5 router.

    historyApiFallback:true,

    }).listen(

    PORT,HOST,function() {

    console.log(localPublicPath);

    });

    编译 jsx、es6、scss 等资源:

    ● 使用 bael 和 babel-loader 编译 jsx、es6

    ● 安装插件: babel-preset-es2015 用于解析 es6

    ● 安装插件:babel-preset-react 用于解析 jsx

    // 首先需要安装 babel

    $ npm i babel-core

    // 安装插件

    $ npm i babel-preset-es2015babel-preset-react

    // 安装 loader

    $ npm i babel-loader

    在项目根目录创建 .babelrc 文件:

    {

    "presets": ["es2015","react"]

    }

    在 webpack.config.js 里添加:

    //使用缓存varCACHE_PATH= ROOT_PATH +'/cache';

    // loaders

    config.module.loaders= [];

    //使用babel编译jsxes6

    config.module.loaders.push({

    test:/\.js$/,

    exclude:/node_modules/,

    include: SRC_PATH,

    //这里使用 loaders,因为后面还需要添加 loader

    loaders: ['babel?cacheDirectory='+CACHE_PATH]

    });

    接下来使用 sass-loader 编译 sass:

    $ npm i sass-loader node-sasscss-loader style-loader

    ●css-loader 用于将 css 当做模块一样来 import

    ●style-loader 用于自动将 css 添加到页面

    在 webpack.config.js 里添加:

    //编译 sass

    config.module.loaders.push({

    test:/\.(scss|css)$/,

    loaders: ['style','css','sass']

    });

    自动引入静态资源到相应 html 页面

    ● 使用 html-webpack-plugin

    $ npm i html-webpack-plugin

    在 webpack.config.js 里添加:

    // html 页面 varHtmlwebpackPlugin= require('html-webpack-plugin');

    config.

    plugins.push(

    newHtmlwebpackPlugin({

    filename:'index.html',

    chunks: ['app'],

    template: SRC_PATH +'/pages/app.html'

    })

    );

    打包合并 js、css

    webpack 默认将所有模块都打包成一个 bundle,并提供了 Code Splitting 功能便于我们按需拆分。在这个例子里我们把框架和库都拆分出来:

    在 webpack.config.js 添加:

    config.entry.lib= [

    'react','react-dom','react-router',

    'redux','react-redux','redux-thunk'

    ]

    config.output.filename='js/[name].js';

    config.

    plugins.push(

    newwebpack.optimize.CommonsChunkPlugin('lib','js/lib.js')

    );

    //别忘了将 lib 添加到 html 页面

    // chunks: ['app', 'lib']

    相关文章

      网友评论

          本文标题:React | 使用webpack构建React项目

          本文链接:https://www.haomeiwen.com/subject/sxwaixtx.html