Я написал модуль TypeScript, который взаимодействует со специфицированным c RESTful API. Модуль никогда нигде не ссылается на process.env
(цель - это браузер, возможно, и узел внизу).
Я использую Rollup для переноса в один JS файл. Оттуда вход в Node и require('./build/index')
успешен, и я даже могу запустить функции и получить ожидаемые результаты. Таким образом, сам Rollup, кажется, работает.
Но файл содержит много ссылок на такие вещи, как process.env.DEBUG
. (Я подозреваю, что Rollup что-то делает для создания регистраторов, которые могут работать как в Node, так и в браузере.)
Теперь я импортирую это в проект пользовательского интерфейса Gatsby, который должен будет подключиться к API с помощью этого модуля:
import { api } from 'my-api'
api.someApiCall()
Проблема в том, что когда Гэтсби компилирует все это (используя Webpack?) В commons.js
(какой-то большой JS файл с большим количеством объединенного кода из разных библиотек, включая мой модуль API), он, кажется, преобразуется модуль process.env.DEBUG
(например) в {}.DEBUG
. Затем браузер жалуется, что «ожидал выражения, получил«. »». Что имеет смысл. Вы не можете получить доступ к {}.DEBUG
. Это должно быть ({}).DEBUG
или const o = {}; o.DEBUG
.
Теперь я уже некоторое время не в мире других языков. Свертывание довольно ново для меня. Гэтсби очень новичок для меня. Какой путь вперед? Должен ли я сказать Rollup через конфиг заменить process.env
на ({})
таким образом? Но это исключает возможность использования библиотеки в Node.js и использования process.env.
Нужно ли что-то изменить в Gatsby, чтобы она заменила process.env
на ({})
?
Редактировать Например, вот мой вывод в моем браузере commons.js
:
function save(namespaces) {
if (null == namespaces) {
// If you set a process.env field to null or undefined, it gets cast to the
// string 'null' or 'undefined'. Just delete instead.
delete {}.DEBUG;
} else {
{}.DEBUG = namespaces;
}
}
/**
* Load `namespaces`.
*
* @return {String} returns the previously persisted debug modes
* @api private
*/
function load() {
return {}.DEBUG;
}
В моем модуле это process.env.DEBUG
.
Редактировать 2 Я также пытался поместить gatsby- node.js, содержащий это:
exports.onCreateWebpackConfig = ({
plugins,
actions,
}) => {
const { setWebpackConfig } = actions;
setWebpackConfig({
plugins: [
plugins.define({
'process.env': "({})",
'{}.DEBUG': '({}).DEBUG',
})
]
})
}
Нет эффекта.