前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >现代Web开发系列教程_05

现代Web开发系列教程_05

作者头像
jeremyxu
发布2018-05-10 11:47:46
6620
发布2018-05-10 11:47:46
举报
文章被收录于专栏:jeremy的技术点滴

本篇不开发新的功能,不过对目前的编译环境重新整理一下。

区别开发编译与生产编译

在webpack.config.js中添加读取环境变量NODE_ENV

代码语言:javascript
复制
...
var isProduction = (process.env.NODE_ENV === 'production');
...

编译出css文件

代码语言:javascript
复制
...
var ExtractTextPlugin = require('extract-text-webpack-plugin');
...
var plugins_options = [
  ...
  new ExtractTextPlugin('css/[name].css', {allChunks: true}),
  ...
];

var loaders = [
  ...
  {
      test: /\.css$/,
      loader: ExtractTextPlugin.extract("style-loader", "css-loader" + (isProduction ? '' : '?sourceMap') + "!postcss-loader")
  },{
      test: /\.less$/,
      loader: ExtractTextPlugin.extract("style-loader", "css-loader" + (isProduction ? '' : '?sourceMap') + "!postcss-loader!less-loader" + (isProduction ? '' : '?sourceMap'))
  }
  ...
];

var webpackConfig = {
    ...
    module: {
        ...
        postcss: function () {
            return [autoprefixer];
        }
    }
};

非生产编译模式,编译出sourcemap,以方便调试

代码语言:javascript
复制
if(!isProduction){
    plugins_options.push(new webpack.SourceMapDevToolPlugin({
        test:      /\.(js|css|less)($|\?)/i,
        filename: '[file].map'
    }));
}

生产编译模式压缩、去注释、优化排序

代码语言:javascript
复制
if(isProduction){
    plugins_options.push(new webpack.optimize.UglifyJsPlugin({
        compress: {
            warnings: false
        },
        output: {
            comments: false
        }
    }));
    plugins_options.push(new webpack.optimize.OccurenceOrderPlugin());
}

非生产编译模式,启用模块热替换

代码语言:javascript
复制
if(!isProduction){
    plugins_options.push(new webpack.HotModuleReplacementPlugin());
}

非生产编译模式,编译出的js带webpack_dev_client

代码语言:javascript
复制
if(!isProduction){
    entries.webpack_dev_client = 'webpack-dev-server/client?http://0.0.0.0:5000';
    entries.webpack_hot_dev_server = 'webpack/hot/only-dev-server';
}

webpack-dev-server的配置

代码语言:javascript
复制
var devServer_options = {
        host : '0.0.0.0',
        port: 5000,
        contentBase: ".",
        progress: true,
        hot: true,
        inline: true,
        stats: { colors: true },
        noInfo: true,
        historyApiFallback: true
};

var webpackConfig = {
    ...
    devServer: devServer_options,
    ...
};

非生产编译模式,使用eval方式生成sourcemap,这个速度最快

if(!isProduction){ webpackConfig.devtool = ‘eval’; }

使用eslint对js进行静态检查

代码语言:javascript
复制
var loaders = [
  ...
  {
      test: /\.(js|jsx)$/,
      exclude: [/node_modules/], // exclude any and all files in the node_modules folder
      loaders: ['babel-loader', 'eslint-loader', 'strict-loader']
  }
  ...
];

安装一系列npm包

代码语言:javascript
复制
npm install webpack-dev-server --global
npm install webpack-dev-server extract-text-webpack-plugin eslint-loader eslint strict-loader eslint-plugin-react babel-eslint style-loader css-loader postcss-loader postcss less-loader less autoprefixer file-loader url-loader img-loader --save-dev

最后在package.json里加入两行npm script

代码语言:javascript
复制
"scripts": {
  "serve-dev": "./node_modules/.bin/webpack-dev-server --progress",
  "build-prod": "NODE_ENV=production ./node_modules/.bin/webpack --progress"
}

以后执行npm run serve-dev就直接打开了webpack-dev-server了,开发终于不用再依赖于nginx了,直接访问http://127.0.0.1:5000/demo4/demo4.html就可以看到页面效果,而且可以修改了代码后还可以热替换。 如果只想编译出最优化的代码,输入npm run build-prod就好了。

前端应该会玩了吧,下篇我将开始说后端了。

本篇源代码地址

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 区别开发编译与生产编译
  • 编译出css文件
  • 非生产编译模式,编译出sourcemap,以方便调试
  • 生产编译模式压缩、去注释、优化排序
  • 非生产编译模式,启用模块热替换
  • 非生产编译模式,编译出的js带webpack_dev_client
  • webpack-dev-server的配置
  • 非生产编译模式,使用eval方式生成sourcemap,这个速度最快
  • 使用eslint对js进行静态检查
  • 安装一系列npm包
  • 最后在package.json里加入两行npm script
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档