rollup 和 webpack 环境变量的设置

一、背景

在开发一个 NPM 包时,常常需要用 rollup 打包,用 webpack 开发调试,处理环境变量的时候就需要兼容两种工具的打包方式。

二、rollup - rollup-plugin-replace

配置

// rollup.config.js
import babel from 'rollup-plugin-babel';
import replace from 'rollup-plugin-replace';

export default {
  input: 'src/index.m.js',
  output: {
    file: 'lib/index.cjs.js',
    format: 'cjs'
  },
  plugins: [
    babel(),
    replace({
      ENV: JSON.stringify(process.env.NODE_ENV || 'development')
    })
  ]
};

源代码

// load
if (ENV === 'development') {
    console.log('开发模式!')
}

NODE_ENV=development npx rollup -c rollup.config.js 编译后

{
  console.log('开发模式!');
}

三、webpack - webpack.DefinePlugin

配置

const webpack = require('webpack');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
  entry: {
    test: './src/test.js'
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'dist')
  },
  devServer: {
    contentBase: './dist'
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: path.resolve(__dirname, 'dist/index.html'),
      template: path.resolve(__dirname, 'src/test.html'),
      inject: true,
      chunksSortMode: 'dependency'
    }),
    new CleanWebpackPlugin(['dist']),
    new webpack.DefinePlugin({
      ENV: JSON.stringify(process.env.NODE_ENV || 'development')
    })
  ]
};

四、参考

Rollup.js 之五:使用插件

教程:如何通过 Rollup 来打包 JavaScript

rollup和webpack

发表评论

您的电子邮箱地址不会被公开。