У меня есть файл javascript (назовем его newconfig.js), который включает модуль (типа Object) с помощью действия require () в файле config.js:
Рассмотрим core.js длябыть:
module.exports = {
configuration: {
showLanguageSelector: false
},
tableStructure: {
columns: [
{
tooltip: 'Indicates if this load has alerts or notes',
name: 'Alerts <em>& Notes</em>'
},
{
tooltip: 'Trailer number and trailer type',
name: 'Trailer <em>Type</em>'
},
{
tooltip: 'Door number',
name: 'Door'
},
{
tooltip: 'Trailer opened date/time',
name: 'Open<span>ed</span>'
},
{
tooltip: 'Trailer closed date/time',
name: 'Closed'
}
]
}
};
Мой файл newconfig.js содержит:
const core = require('./core/config');
Затем я клонирую экземпляр ядра в моем файле:
let config = Object.assign({}, core);
Затем я изменяюмой локальный объект
config.Configuration = {
showLanguageSelector: true
};
config.tableStructure.columns = [
{
tooltip: 'Indicates if this load has alerts or notes',
name: 'Alerts <em>& Notes</em>',
}, {
tooltip: 'Trailer number and trailer type',
name: 'Trailer <em>Type</em>',
}
];
, чтобы я мог экспортировать его как другую конфигурацию, расширяющую конфигурацию ядра:
module.exports = config;
Когда внешний файл пытается включить файл ./core/configлокально для использования, он имеет изменения newconfig.js
IE (mylayout.js):
const core = require('./core/config');
console.log(core);
значение ядра при выводе:
{
Configuration: {
showLanguageSelector: false // interesting how this wasn't mutated!!!!!
},
tableStructure {
columns: [
{
tooltip: 'Indicates if this load has alerts or notes',
name: 'Alerts <em>& Notes</em>',
}, {
tooltip: 'Trailer number and trailer type',
name: 'Trailer <em>Type</em>',
}
]
}
}
Где я ошибаюсь, из-за чего моя исходная конфигурация ядра видоизменяется, если я клонирую объект в новый объект перед его изменением и экспортирую этот новый объект?
, требующий моего newconfig.js в другом jsФайл возвращает желаемое поведение:
{
Configuration: {
showLanguageSelector: true
},
tableStructure {
columns: [
{
tooltip: 'Indicates if this load has alerts or notes',
name: 'Alerts <em>& Notes</em>',
}, {
tooltip: 'Trailer number and trailer type',
name: 'Trailer <em>Type</em>',
}
]
}
}