0

该项目使用 Ruby WebpackerLando用于本地开发。我的config/webpacker.yml包含这个:

development:
  <<: *default
  compile: true

  dev_server:
    public: some.lndo.site
    host: '0.0.0.0'
    port: 3035
    ...
    watch_options:
      poll: 1000
      aggregate_timeout: 500

因此,在为我的本地环境添加/编辑参数的 insetad 中,webpacker.yml我可以将其中一些选项设置为我的.lando.yml文件中的环境变量(即public, host, port):

services:
  appserver:
    type: ruby:2.6.3
    overrides:
      environment:
        WEBPACKER_DEV_SERVER_PUBLIC: some.lndo.site
        WEBPACKER_DEV_SERVER_HOST: '0.0.0.0'
        WEBPACKER_DEV_SERVER_PORT: '3035'
        ...

这行得通。

问题:但是如何通过环境变量为watch-options(即poll)设置环境变量?

我试过这些,但没有运气:

WEBPACKER_DEV_SERVER_WATCHOPTIONS_POLL 
WEBPACKER_DEV_SERVER_WATCH_OPTIONS_POLL
WEBPACKER_DEV_SERVER_POLL
4

1 回答 1

3

看起来dev_server目前不支持对象内的嵌套 JSON(从 Webpacker v4.2.0 开始),其中key插值ENV["WEBPACK_DEV_SERVER_#{key.upcase}"]仅匹配顶级键:https ://github.com/rails/webpacker/blob/417542c8ed7d344ecc24b3ae40e303d478ad50d0 /lib/webpacker/dev_server.rb#L59-L61

# env_prefix = "WEBPACKER_DEV_SERVER".freeze
def fetch(key)
  ENV["#{env_prefix}_#{key.upcase}"] || config.dev_server.fetch(key, defaults[key])
end

由于我猜您不需要 Rails 服务器了解监视轮询选项,因此不必将动态值传递给config/webpacker.yml. 相反,我会将它们读入config/webpack/development.js,即直接读入 Webpack:

// config/webpack/development.js

const environment = require('./environment.js');

environment.config.merge({
  devServer: {
    watchOptions: {
      poll: process.env.WEBPACK_DEV_SERVER_WATCH_POLL,
      aggregateTimeout: process.env.WEBPACK_DEV_SERVER_WATCH_TIMEOUT
    }
  }
});

module.exports = environment.toWebpackConfig();
于 2019-12-03T18:17:52.243 回答