Как экспортировать объект с помощью методов и свойств
У меня есть два js-файла в Electron (который использует Nodejs), и я пытаюсь экспортировать из одного и требовать в другом.
app.js:
App = {
server: {
host: '192.168.0.5',
user: 'root',
}
ping: function() {
}
}
exports.App = App
Я пытался всеми возможными способами экспорта, в том числе module.exports = App
, module.exports.App = App
и так далее.
Первая попытка ping.js:
var App = require('../app.js') // I have also tried adding .App to the end
console.log(App) // This returns an object which contains the App object
ping.js вторая попытка:
var App = require('../app.js')
App.x = 'y'
console.log(App) // this returns an object which contains the App object and the x property
Может показаться, что App
содержит другой App
объект, но console.log(App.App)
говорит, что не существует.
1 ответ
Первое, что я должен сделать, чтобы решить эту проблему, это убедиться, что я использую полный путь к требуемому модулю, как в:
const Path = require('path')
const App = require(Path.join(__dirname,'../app')) // the .js isn't needed here.
Обратите внимание, что это предполагает, что app.js
Файл находится в непосредственном родительском каталоге того, в котором работает приложение.
Если это не сработает, я бы удостоверился, что файлы находятся там, где вы думаете, и что процесс, который вы запускаете, находится внутри файловой системы, где вы думаете. Вы можете определить это, добавив это в начало вашего основного файла сценария:
console.log("current working directory:",process.cwd())
Или в es6:
console.log(`current working directory: %s`, process.cwd())
Если распечатанный каталог не соответствует вашим предположениям, измените require
Заявление соответственно.
И для справки, "правильный" способ экспортировать вашу карту приложения был бы следующим:
const App = {
...
}
module.exports = App
Или используя es7:
export default App = {
...
}
(См. Экспорт для более подробной информации о модулях es7.)
В любом случае, вам потребуется модуль как:
const App = require(PATH_TO_APP)