Node/Webpack/javascript es6-在require-inside对象上添加条件。Assign()
我有一个模块,它通过要求正确的索引来设置语言。{i18n}.js 下面的代码适用于带有/fr/、/en/、/es/…的路径(URL)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
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
编辑
在一些评论要求我测试各种需求之后,以下是构建的结果:
。/../i18n build/index.${language}.jsrequire(
=>构建工作正常)
。/../i18n build/index.fr.js需要(
=>构建工作正常)
。${language}.js需要(isCountry?
。/i18n build/index.en.js:
=>生成失败)
。/i18n build/index.fr.js需要(isCountry?
。/i18n build/index.en.js:
=>构建失败)
。/../i18n build/index.fr.js需要(iCountry?
。/../i18n build/index.en.js:
=>构建工作)
。/../i18n build/index.${language}.jsrequire(isCountry?
。/../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是什么?