Я пытаюсь понять функции assign/extend в lodash, поскольку я столкнулся с очень запутанным результатом, идущим через установку стека mean.io.Lo-dash продлить/назначить поведение по умолчанию
Здесь:
'use strict';
var _ = require('lodash');
// Load app configuration
var foo = require(__dirname + '/../config/env/all.js');
console.log('-.-.-.-.-.-.-.-.-.-. foo before _.assign .-.-.-.-.-.-.-.-.-.-');
console.log(foo)
module.exports = _.assign(
require(__dirname + '/../config/env/all.js'),
require(__dirname + '/../config/env/' + process.env.NODE_ENV + '.js') || {}
);
var bar = require(__dirname + '/../config/env/all.js');
console.log('-.-.-.-.-.-.-.-.-.-. foo after _.assign .-.-.-.-.-.-.-.-.-.-');
console.log(foo);
console.log('-.-.-.-.-.-.-.-.-.-. bar .-.-.-.-.-.-.-.-.-.-');
console.log(bar);
console.log('-.-.-.-.-.-.-.-.-.-. A direct require call .-.-.-.-.-.-.-.-.-.-');
console.log(require(__dirname + '/../config/env/all.js'));
И то, что я получаю:
-.-.-.-.-.-.-.-.-.-. foo before _.assign .-.-.-.-.-.-.-.-.-.-
{ root: '/home/bax/Code/lab/mean/test1',
port: 3000,
db: undefined }
-.-.-.-.-.-.-.-.-.-. foo after _.assign .-.-.-.-.-.-.-.-.-.-
{ root: '/home/bax/Code/lab/mean/test1',
port: 3000,
db: 'mongodb://localhost/mean-dev',
app: { name: 'MEAN - A Modern Stack - Development' },
facebook:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/facebook/callback' },
twitter:
{ clientID: 'CONSUMER_KEY',
clientSecret: 'CONSUMER_SECRET',
callbackURL: 'http://localhost:3000/auth/twitter/callback' },
github:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/github/callback' },
google:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/google/callback' } }
-.-.-.-.-.-.-.-.-.-. bar .-.-.-.-.-.-.-.-.-.-
{ root: '/home/bax/Code/lab/mean/test1',
port: 3000,
db: 'mongodb://localhost/mean-dev',
app: { name: 'MEAN - A Modern Stack - Development' },
facebook:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/facebook/callback' },
twitter:
{ clientID: 'CONSUMER_KEY',
clientSecret: 'CONSUMER_SECRET',
callbackURL: 'http://localhost:3000/auth/twitter/callback' },
github:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/github/callback' },
google:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/google/callback' } }
-.-.-.-.-.-.-.-.-.-. A direct require call .-.-.-.-.-.-.-.-.-.-
{ root: '/home/bax/Code/lab/mean/test1',
port: 3000,
db: 'mongodb://localhost/mean-dev',
app: { name: 'MEAN - A Modern Stack - Development' },
facebook:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/facebook/callback' },
twitter:
{ clientID: 'CONSUMER_KEY',
clientSecret: 'CONSUMER_SECRET',
callbackURL: 'http://localhost:3000/auth/twitter/callback' },
github:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/github/callback' },
google:
{ clientID: 'APP_ID',
clientSecret: 'APP_SECRET',
callbackURL: 'http://localhost:3000/auth/google/callback' } }
Express app started on port 3000
Вопрос: Я не должен получить те же результаты каждый раз, когда я делаю: console.log(require(__dirname + '/../config/env/all.js'));
?
Вы получаете тот же объект, но вы изменили его между ними? – Bergi
Умм, ох. Кажется, я понял. То, что я получаю от require(), является ссылкой на объект module.exports, который был изменен _.assign(), поэтому, когда я вызываю require() снова, я получаю ссылку на тот же объект экспорта измененного модуля ... это правильно? –
Да, именно :-) – Bergi