javascript - 如何使用 gulp 在 js 文件中使用环境变量
问题描述
我正在帮助由 html、css 和 js 插件组成的项目,这些插件都是用 gulp 构建的。该项目是作为模板购买并由我们的营销团队定制的(是的......),我应该帮助编写脚本。
现在有一个插件可以通过$.ajax()
调用将表单数据发送到服务器。Url 参数设置为常量,如下所示:
$.ajax({
url: 'exact-api-url',
type: 'POST'
...
});
如何用 env 变量替换它,我应该将它存储在哪里?prod
和有不同的 URL dev
。我希望它看起来像这样:
$.ajax({
url: environment.API_URL,
type: 'POST',
...
});
从解决方案中,我发现它们主要处理gulpfile.js本身中的环境变量,而不是项目中的js代码。一种解决方法建议使用我不喜欢的全局js变量。正确的方法是什么?
我是一个 Angular/React 人,主要使用 webpack,我发现 gulp 缺少环境文件夹令人不安。
解决方案
以下是解决方案之一。您可以使用模板config.tmpl.js将配置文件生成为config.js
module.exports = <%= url %>
下面是我为 Dev & prod 设置 url 的 gulp 任务。
gulp.task('set-dev-node-env', function() {
return process.env.url = 'exact-dev-url';
});
gulp.task('set-prod-node-env', function() {
return process.env.url = 'exact-prod-url';
});
生成配置文件的任务。
var gulp = require('gulp');
var template = require('gulp-template');
var rename = require('gulp-rename');
gulp.task('config', function() {
return gulp.src('path/to/config.tmpl.js')
.pipe(template({url: `${process.env.url}`}))
.pipe(rename('config.js'))
.pipe(gulp.dest('path/to/config.js'));
});
以下是为 dev 和 prod 构建的任务
gulp.task('build_for_prod', ['set-prod-node-env','config'], function() {
runSequence(
'...buildSteps'
);
});
gulp.task('build_for_dev', ['set-dev-node-env','config'], function() {
runSequence(
'...buildSteps'
);
});
最后,在你的 JS 文件中
var config = require('path/to/config.js');
$.ajax({
url: config.url,
type: 'POST',
...
});
希望这可以帮助 :)
推荐阅读
- amazon-web-services - 如果 AMI 或快照已加密以及使用 AWS 中的哪个密钥 AWS Managed CMK 或 Customer Manager CMK,我如何获取其详细信息
- vue.js - 当对象在 vue.js 中异步加载时,如何将 v-model 设置为对象属性?
- html - 文本是否应该成为可访问性的焦点?我特别在考虑键值对
- javascript - WebAssembly 应用程序如何将其本机 Window / OpenGL / Vulkan 调用映射到 DOM 中的画布元素?
- swift - 如何处理在firestore中包含具有空值字段的文档?
- javascript - 事件循环 - 无限循环不会停止在 Chrome 中渲染管道,但会在 Firefox 上停止
- javascript - Jquery - 选择具有动态名称的数组集
- c++ - 使用 vcpkg 构建的 Zlib - 在 x86 模式下在 MSVC 2015 中链接时出错
- json - 使用反应具有相同json问题的多个页面
- wordpress - 看不到远程 WordPress 安装的内容,但站点加载