Машинопись для NodeJS и браузера - PullRequest
0 голосов
/ 04 мая 2018

Я новичок в nodejs (знаком с машинописью и JS). У меня возникла проблема с использованием машинописного текста для создания кода, который будет работать как для браузера, так и для nodejs с использованием машинописного текста. Учитывая приведенный ниже пример кода, я хотел бы, чтобы класс можно было повторно использовать как на узле, так и в браузере.

-index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />

</head>
<body>
    <script type="text/javascript" src="/js/myabstractclass.js"></script>
    <script type="text/javascript" src="/js/myclass.js"></script>
    <script>
        var myclass = new sample.myclass();
        myclass.log("hello world");
    </script>
</body>
</html>

-nodeserver.ts

var express = require('express');
var webapp = express();
var path = require('path');
var server = require('http').Server(webapp);

var mac = require('./myabstractclass');
var mc = require('./myclass');
mc.log("hello world");

var port = 8081;

webapp.use('/js', express.static(__dirname));
webapp.get('/', function (req, res) {
    res.sendFile(path.join(__dirname, '/index.html'));
});

server.listen(process.env.PORT || port, function () {
    console.log('Listening on ' + server.address().port);
});

-myclass.ts

namespace sample {
    export class myclass extends scripts.myabstractclass {

    }
}

-myabstractclass.ts

namespace scripts {
    export class myabstractclass {
        public log(val: string): void {
            console.log(val);
        }
    }
}

1 Ответ

0 голосов
/ 05 мая 2018

Спасибо @estus. Я прислушался к твоему совету и абстрагировал элементы document и jquery для класса UI only (в моем основном проекте).

Я чувствую себя комфортно с подходом, который я выбрал (хотя это может считаться хакерским). Я в основном использую module.exports внизу каждого файла и устанавливаю все в глобальную область видимости. Затем я включаю файл один раз и могу установить declare var в любое место, где мне нужен импорт, так как я устанавливаю все для определенной глобальной области видимости, все существует после моего первого вызова. Самая приятная часть, теперь мой требуемый файл можно использовать повторно.

Вот мои обновленные файлы, которые работают как на узле, так и в браузере с использованием машинописи.

- index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />

</head>
<body>
    <script type="text/javascript" src="/js/myabstractclass.js"></script>
    <script type="text/javascript" src="/js/myclass.js"></script>
    <script>
        var myclass = new sample.myclass();
        myclass.log("hello world");
    </script>
</body>
</html>

- nodeserver.ts

require('./required');

declare var webapp;
declare var express;
declare var server;
declare var path;
declare var myclass;

var m = new sample.myclass();
m.log('hello world');


var port = 8081;

webapp.use('/js', express.static(__dirname));
webapp.get('/', function (req, res) {
    res.sendFile(path.join(__dirname, '/index.html'));
});

server.listen(process.env.PORT || port, function () {
    console.log('Listening on ' + server.address().port);
});

- myclass.ts

namespace sample {
    export class myclass extends scripts.myabstractclass {

    }
}

if (typeof (module) != 'undefined') {
    module.exports = sample.myclass;
}

- myabstractclass.ts

namespace scripts {
    export class myabstractclass {
        public log(val: string): void {
            console.log(val);
        }
    }
}

if (typeof (module) != 'undefined') {
    module.exports = scripts.myabstractclass;
}

- required.ts

global.express = require('express');
global.webapp = express();
global.path = require('path');
global.server = require('http').Server(webapp);
global.scripts = {};
global.scripts.myabstractclass = require('./myabstractclass');
global.sample = {};
global.sample.myclass = require('./myclass');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...