【问题标题】:Setting Node Enviorments for my GULP / WEPACK workflow为我的 GULP / WEBPACK 工作流程设置节点环境
【发布时间】:2017-01-10 19:33:19
【问题描述】:

我正在尝试使用 NODE.env 来确定天气我想用 webpack 缩小我的 JS,当我手动在 js 中设置 env 时它确实有效,但我认为我也可以将它集成到我的默认值中并构建任务。不知怎的,它不起作用。

package.json

.
.
.
      "scripts": {
        "dev": "gulp",
        "build": "gulp build"
      }

Gulpfile.js:

'use strict';

const gulp = require('gulp'),
  // cleanCSS = require('gulp-clean-css'),
  webpack = require('webpack-stream'),
  pkg = require('./package.json'),
  $ = require('gulp-load-plugins')({
    pattern: ['*'],
    scope: ['devDependencies']
  }),
  onError = (err) => {
    $.notify.onError({
      title: 'Gulp',
      subtitle: 'Failure!',
      message: '\n' + '\n' + 'Error: <%= error.message %>',
      sound: 'Frog'
    })(err);
  };

/**
  * Static Server + watching scss/html files
  */
gulp.task('serve', ['scss', 'webpack'], () => {

  $.browserSync.init({
    server: pkg.paths.src.base
  });

  gulp.watch(pkg.paths.src.scss + pkg.vars.scssPattern, ['scss']);
  gulp.watch(pkg.paths.src.js + pkg.vars.jsPattern, ['webpack']);
  gulp.watch('src/*.html').on('change', $.browserSync.reload);
});

// Compile sass into CSS & auto-inject into browsers
gulp.task('scss', () => {
  return gulp.src(pkg.paths.src.scss + pkg.vars.scssName)
    .pipe($.newer(pkg.paths.src.assets + pkg.vars.siteCssName))
    .pipe($.plumber({ errorHandler: onError }))
    .pipe($.sourcemaps.init())
    .pipe($.sass.sync())
    .pipe($.sourcemaps.write())
    .pipe($.autoprefixer({
      browsers: ['last 2 versions'],
      cascade: false
    }))
    .pipe($.rename({suffix: '.min'}))
    .pipe(gulp.dest(pkg.paths.src.assets))
    .pipe($.notify({
      title: 'Gulp',
      subtitle: 'Success!',
      message: 'Scss task completed!',
      sound: 'Pop'
    }))
    .pipe($.browserSync.stream());
});

// concat translate and minify js
gulp.task('webpack', () => {
  return gulp.src(pkg.paths.src.js + pkg.vars.jsName)
  .pipe($.newer(pkg.paths.src.assets + pkg.vars.siteJsName))
  .pipe($.plumber({ errorHandler: onError }))
  .pipe(webpack(require('./webpack.config.js')))
  .pipe(gulp.dest(pkg.paths.src.assets))
  .pipe($.browserSync.stream());
});

gulp.task('default', ['serve'], () => {
  return process.env.NODE_ENV === 'dev';
});

gulp.task('build', ['serve'], () => {
  return process.env.NODE_ENV === 'prod';
});

webpack.config.js:

const webpack = require('webpack'),
  pkg = require('./package.json'),
  debug = process.env.NODE_ENV !== 'prod';

module.exports = {
  context: __dirname,
  devtool: debug ? 'inline-sourcemap' : null,
  entry: pkg.paths.src.js + pkg.vars.jsName,
  output: {
    path: __dirname + pkg.paths.src.assets,
    filename: pkg.vars.siteJsName
  },
  module: {
    loaders: [
      {
        test: /(\.jsx|\.js)$/,
        loader: 'babel',
        exclude: /node_modules/
      },
      {
        test: /(\.jsx|\.js)$/,
        loader: 'eslint-loader',
        exclude: /node_modules/
      }
    ]
  },
  plugins: debug ? [] : [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false })
  ]
};

【问题讨论】:

    标签: javascript node.js gulp webpack


    【解决方案1】:

    我想出了怎么做:

    我必须添加运行序列以按特定顺序运行任务并添加以下内容:

    package.json:

    "scripts": {
        "dev": "gulp develop",
        "build": "gulp deploy"
      }
    

    Gulp 文件:

    设置变量以保护实际环境(如果设置了特定环境,则仅对在任务中执行应用程序有用)。

    var config = {
      env: process.env.NODE_ENV
    };
    

    设置环境的任务:

    gulp.task('set-dev-node-env', function () {
       return process.env.NODE_ENV = config.env = 'dev'; //  eslint-disable-line
    });
    gulp.task('set-prod-node-env', function () {
       return process.env.NODE_ENV = config.env = 'prod'; //  eslint-disable-line
    });
    

    实际任务:

    gulp.task('default', ['serve']);
    
    gulp.task('develop', ['set-dev-node-env'], function () {
      return $.runSequence(
          'default'
       );
    });
    
    gulp.task('deploy', ['set-prod-node-env'], function () {
      return $.runSequence(
          'default'
       );
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2017-06-24
      • 2014-04-14
      • 2014-08-25
      • 2022-01-25
      相关资源
      最近更新 更多