Node/Webpack/javascript es6-在require-inside对象上添加条件。Assign()

Node/Webpack/javascript es6-在require-inside对象上添加条件。Assign(),javascript,node.js,webpack,Javascript,Node.js,Webpack,我有一个模块,它通过要求正确的索引来设置语言。{i18n}.js 下面的代码适用于带有/fr/、/en/、/es/…的路径(URL) module.exports = function (locals) { var route = global.RoutesPages.routes.find(r => r.url == locals.path); const language = locals.path.split('/')[1]; return Promise.resolv

我有一个模块,它通过要求正确的索引来设置语言。{i18n}.js

下面的代码适用于带有/fr/、/en/、/es/…的路径(URL)

module.exports = function (locals) {
  var route = global.RoutesPages.routes.find(r => r.url == locals.path);
  const language = locals.path.split('/')[1]; 
  return Promise.resolve(    
      locals.template(
      Object.assign(
        {},
        {           
          title:        route.title,
          type:         route.type
        },

       require(`../../i18n-build/index.${language}.js`)

      )
    )
  )

};
因此它需要
example.com/fr/cool
文件
i18n build/index.fr.js
,并且需要
example.com/en/cool
文件
i18n build/index.en.js

问题是,我有一个例子,url是example.com/global,因此require告诉我它找不到正确的文件,因为它试图为
example.com/global/foo
文件
i18n build/index.global.js
,这是预期的,因为我不需要这个文件,也不想这样做。实际上,对于访问example.com/global的用户,我想使用
i18n build/index.en.js
和英语作为“全局”用户默认值

我试图在require中使用条件,但构建失败:

module.exports = function (locals) {
  var route = global.RoutesPages.routes.find(r => r.url == locals.path);
  const language = locals.path.split('/')[1];
  function isCountry() {
    //detect if language in uri is "global", 
    //i.e not a specific country
    if (language !== "global" ) {
      return true;
    }
  }

  return Promise.resolve(    
      locals.template(
      Object.assign(
        {},
        { 
          title:        route.title,
          type:         route.type
        },

        require( isCountry ? `../i18n-build/index.${language}.js` : `../i18n-build/index.en.js` )        

      )
    )
  )

};
当webpack使用/fr/为一个url构建文件时,它似乎打破了以前的工作方式,我得到了错误:

Cannot find module '../i18n-build/index.fr.js'
整个构建都失败了

我认为我写的不正确,但我不知道如何应用一个基本上如下的条件:

如果(isCountry),需要
。/i18n build/index.${language}.js
,否则需要
。/i18n build/index.en.js

编辑

在一些评论要求我测试各种需求之后,以下是构建的结果:

  • require(
    。/../i18n build/index.${language}.js
    =>构建工作正常

  • 需要(
    。/../i18n build/index.fr.js
    =>构建工作正常

  • 需要(isCountry?
    。${language}.js
    。/i18n build/index.en.js
    =>生成失败

  • 需要(isCountry?
    。/i18n build/index.fr.js
    。/i18n build/index.en.js
    =>构建失败

  • 需要(iCountry?
    。/../i18n build/index.fr.js
    。/../i18n build/index.en.js
    =>构建工作

  • require(isCountry?
    。/../i18n build/index.${language}.js
    。/../i18n build/index.en.js
    =>构建失败


最后一个问题是如何正确地在require上创建条件,因为这两个文件都存在,我甚至没有在它们内部使用变量($language)

,所以错误一定是输入错误,请尝试在条件中添加一个
。/
更多信息:

require( isCountry ?`../../i18n-build/index.${language}.js`:`../../i18n-build/index.en.js`)

请通过以下方式更改您的语言作业行:

const language = locals.path.split('/')[1] == 'global' ? 'en' : locals.path.split('/')[1];
然后使用第一个代码require

require(`../../i18n-build/index.${language}.js`)

如果您只是像这样尝试
require('../i18n build/index.fr.js')
只是为了测试它是否失败?我现在就测试,但我认为它会工作。5分钟后回来更新问题,只需将结果明确指向实施条件要求的问题。看看我的编辑,太奇怪了。我将添加您的建议,这些建议仅…部分有效检查我的编辑上的2个最新测试
语言的console.log是什么?