使用gulp及webpack写入全局数据

628 阅读1分钟

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

前言

在现在普遍前端工程化的时候,我们时常会使用webpack/gulp等打包工具来打包项目以便开发与上线。

我们在代码中也会写入全局不可变的数据来表示一个数据,但是直接写在代码中会有一个问题,在打包的时候,我们的参数不能写入代码中。

所以这个时候我们可以使用webpack来实现这个功能。

DefinePlugin

webpack中自带了一个插件就叫做DefinePlugin,我们可以使用这个插件来实现写入全局变量。

module.exports = ({ dev = true }) => {
    entry: {},
    plugins: [
        new webpack.DefinePlugin({
            G_IS_DEV: dev
        })
    ],
    output: {}
}

上面就实现了一个自定义G_IS_DEV的全局变量。

当然这种写法我是使用了gulp来管理,在gulp中使用webpack-stream来使用这个文件并传入参数。

gulp中引入webpack文件

我们首先得安装webpack-stream这个包,然后在gulpfile.js中写入。

gulp.task('js', () => {
  return gulp
    .src('main.js')
      .pipe(
        // 在这里引入webpack配置文件
        $.webpackStream(
          require('./webpack.config.js')({
            dev: true
          })
        )
      )
      .pipe(gulp.dest(buildFolder))
  })

上面这个gulp任务就可以帮助我们使用webpack来打包js文件,并且在main.js发生改变时重新打包。

最后我们在gulp的默认任务中调用这个任务就可以了。

gulp.task("default", gulp.series("js"));

一些有趣的作用

image.png

你知道怎么在页面中打印出以上数据吗?

当然,不是你手动将这个数据写入代码中。

我们可以使用上面的知识来实现这个功能。

webpack的配置文件中写入:

function getRevision(useLast = false){
    const commitHash = execSync('git rev-parse --short ' + (useLast ? 'HEAD^1' : 'HEAD')).toString(
      'ascii'
    )
    return commitHash.replace(/^\s+|\s+$/g, '');
},

上面这个函数可以让我们获取到git提交的短代码。

看到这里你肯定知道怎么办了吧。

module.exports = ({ dev = true }) => {
    entry: {},
    plugins: [
        new webpack.DefinePlugin({
            G_COMMIT_HASH: getRevision()
        })
    ],
    output: {}
}

这样我们就拥有一个叫做G_COMMIT_HASH的全局变量了。