Webpack 的 DefinePlugin()
函数允许你用另一个令牌替换编译代码中的给定令牌。一个常见的用例是,当您不能直接使用 .env
文件时,使用它来定义环境变量。
假设我们的 .env
文件有一个 KEY
值:
KEY = 123456
我们使用 dotenv
模块,并配置如下 webpack:
'use strict'
const webpack = require('webpack')
require('dotenv').config()
const compiler = webpack({
entry: {
app: `${__dirname}/src/main.js`
},
output: {
path: `${__dirname}/public`,
filename: 'bundle.js'
},
plugins: [
new webpack.DefinePlugin({
__KEY: `${process.env.KEY}`
})
]
})
编译前:
console.log(__KEY)
编译后:
/******/ ;() => {
// webpackBootstrap
/******/ 'use strict'
var __webpack_exports__ = {} // CONCATENATED MODULE: ./app.js
/***/ ;() => {
eval(
"console.log('123456')\r\n\n\n//# sourceURL=webpack://webpack-DefinePlugin/./app.js?"
)
/***/
}
/******/
}
另一个有用的技巧是使用 DefinePlugin()
在开发和生产服务器 URL 之间切换。例如,假设您希望根据 NODE_ENV
将前端发出请求的服务器切换到另一个服务器。下面是使用 DefinePlugin()
的方法:
new Webpack.DefinePlugin({
URL:
process.env.NODE_ENV === 'development'
? `'http://localhost:3000'`
: `'https://api.myapp.com'`
})