nerv_,
указать в readme лицензию распространения уже не модно ? |
Цитата:
|
Всем привет! :)
Вопрос: как вы описываете зависимости и подключаете их на фронтэнде? О чем именно речь: допустим есть проект. Речь идет о фронтенде. В браузер подключается модуль X, у которого есть зависимость Y. В свою очередь у модуля Y есть зависимость Z. Олдскульное подключение будет выглядеть следующим образом (условимся, что один файл -- один модуль): <script src="Z.js"></script> <script src="Y.js"></script> <script src="X.js"></script> Тут мы руками разруливаем подключение зависимостей. Этого хотелось бы избежать. Хочется сделать так <script src="X.js"></script> и при этом, чтобы необходимые зависимости подключились автоматически. Интересуют стратегии обе стратегии (development и production). |
nerv_, что мешает юзать webpack?
Подключаем X.js, далее X.js
import "Z.js";
// или динмачески
import("./Y.js").then( y => ...)
|
Цитата:
2. X.js import "Z.js"; // тут я не знаю, как подключены зависимости. Они могут быть подключены олдскульно [как глобальные переменные] (сv. мой пост выше) или через тот же вебпак Вебпак так работает? |
Цитата:
Цитата:
или так Z.js .. window.Z = (z) => ... ; X.js
import "./Z";
window.Z("z");
За год использования вебпака, еще не нашлось такой проблемы которую не удалось решить вебпаком, хотя у меня куча легаси кода) |
Кажется, jspm -- то, что мне нужно:
Цитата:
Посмотрим. Я с ним не знаком. |
Цитата:
1) установить ноду 2) установить вебпак 3) локально разрабатывать не всегда хочется этим заморачиватся. |
Цитата:
Цитата:
|
Вывод в файл
index.js
const {readFromFile, writeToFile} = require('./readFromFile');
...
case '11':
return writeToFile('newFile.json', JSON.stringify(investors)); //investors.concat(deposits)
readFromFile.js:
.........
function writeToFile(file, data) {
return new Promise((resolve, reject) =>{
fs.writeFile(file, data, 'utf-8', function (err) {
if (err) {
reject(err);
}
resolve('Данные успешно сохранены')
})
})
}
module.exports = {readFromFile, writeToFile};
Выход: app.js
case UI.EXIT:
process.exit(0);
ui.js
constructor() {
....
this.EXIT = 10;
}
Вывод существующих пунктов отправления: app.js
case UI.MENU_PRINT_FLIGHTS_BY_POINTS:
// получаем пункты назначения рейсов и фильтруем из общего списка
departures = flights.map(flights => flights.departure);
console.log('Возможные пункты направления');
showAll(departures);
return UI.getRangeValue('Выберите пункт отправления:', 1, departures.length).then(answer => {
departure = departures[answer - 1];
return UI.getDestination();
}).then(destination => {
|
annyrtd, зачем это здесь?
|
Всем привет!
1) Кто что использует на сайте для картинок < 10 kb. Таких картинок, скажем, 40 штук. Спрайт или base64 ? 2) Кто как ресолвит пути к картинкам в gulp(<4) для sass файлов? Понятно, что можно делать и вебпаком, но интересует именно такая ситуация. Пример, структура папок Код:
/frontend
.header {
width: 300px;
height: 300px;
border: 1px solid red;
margin: 0 auto;
background: url('loader.gif') left center no-repeat;
}
Если использовать типа такого
return combiner(
gulp.src('frontend/scss/**/*.scss', {base: 'frontend/scss'}),
$.sass({
outputStyle: !isDevelopment ? 'compressed' : 'nested'
}),
$.concat('main.css'),
gulp.dest('public')
)
то в public будет такая картина Код:
/publicНаписал небольшое решение. Оно работает. Но может как-то проще можно? :)
const through2 = require('through2').obj;
const rework = require('rework');
const reworkUrl = require('rework-plugin-url');
function prependUrls(css, prepend) {
return rework(css)
.use(reworkUrl(function(url) {
if (url.indexOf('data:') === 0) {
return url;
} else {
const newUrl = prepend + url;
return newUrl.replace('//', '/');
}
}))
.toString();
}
gulp.task('...', function(){
return combiner(
gulp.src('frontend/scss/**/*.scss', {base: 'frontend/scss'}),
$.sass({
outputStyle: !isDevelopment ? 'compressed' : 'nested'
}),
through2(
function (file, enc, cb) {
const prepend = path.dirname(file.relative) + '/';
const css = prependUrls(file.contents.toString(), prepend);
file.contents = Buffer.from(css);
cb(null, file);
}
),
$.concat('main.css'),
gulp.dest('public')
)
})
|
Цитата:
В вашем случае лучше спрайт. |
Как вы запускаете фоновые задачи для nodejs? Child process?
Например мне нужно что то трудоемкое сделать в фоне что бы не блокировать основной процесс. Как вы решаете такую задачу? И какие инструменты юзаете? |
Под linux exec command > /dev/null 2>&1
|
Poznakomlus, да но мне нужно запустить код на ноде, только в другом процессе)
|
так напиши
exec('node myscript.js > /dev/null 2>&1');
таким образом запустишь скрипт в отдельном потоке https://habrahabr.ru/post/138591/ возможные проблемы использовать nohup (nohup node myscript.js) использовать полный путь к бинарнику node |
Poznakomlus, ну если так подходить к делу то лучше использовать fork. Но мне я думал о чем то типо kue только без редис
|
async / await
как же мы раньше без этой прелести жили :)
const fs = require('fs')
const path = require('path')
let rootDir = path.join(__dirname, '..')
// [url]https://github.com/nervgh/koa-architect[/url]
exports.get = {
'index': async function (ctx) {
ctx.state.root = await readRoutesRecursive(rootDir, new Node('', 'admin'))
ctx.render(__dirname, 'views/index')
}
}
// TODO: Should we move this code to a standalone package?
class Node {
/**
* @param {String} prefix
* @param {String} name
*/
constructor(prefix, name) {
this.name = name
this.path = `${prefix}/${name}`
this.children = []
}
/**
* @return {Object}
*/
toJSON() {
return Object.assign({}, this)
}
}
/**
* A few promisified fs methods
* @type {Object}
*/
const fsp = {
lstat: promisify(fs.lstat),
readdir: promisify(fs.readdir)
}
/**
* @param {String} dir
* @param {Node} node
* @return {Promise.<Node>}
*/
async function readRoutesRecursive(dir, node) {
for(let name of await fsp.readdir(dir)) {
if (await isDirectory(path.join(dir, name))) {
let tryMiddleware = path.join(dir, name, 'middleware')
if (await isDirectory(tryMiddleware)) {
node.children.push(await readRoutesRecursive(tryMiddleware, new Node(node.path, name)))
} else {
node.children.push(new Node(node.path, name))
}
}
}
return node
}
/**
* @param {String} pathString
* @return {Promise.<Boolean>}
*/
async function isDirectory(pathString) {
try {
let stat = await fsp.lstat(pathString)
return stat.isDirectory()
} catch (err) {
return false
}
}
/**
* @param {Function} fn
* @param {*} ctx
* @return {Function}
*/
function promisify(fn, ctx) {
return (...args) => {
return new Promise((resolve, reject) => {
args.push((err, data) => err ? reject(err) : resolve(data))
fn.apply(ctx, args)
})
}
}
|
nerv_, мне тоже нравится async/await с koa получается не плохо и + мои декораторы)
@Controller("/test")
export default class {
@RequestMapping({value: "add", method: RequestMethod.POST})
async add(ctx) {
await service.doAction(ctx.request.body.files);
ctx.redirect("/plugin/list");
}
@RequestMapping("/")// by default method GET
async uploadPageView({render}, params) {
await render("upload.html");
}
@RequestMapping("list")
async list(ctx) {
return service.getList();
}
}
|
Не понимаю зачем некоторые люди пишут такую дичь и даже ее не коментируют (это java)
private void _write(byte a, byte b, byte c) throws IOException {
out[0] = ENCODING_TABLE[(a>>2)&0x3F];
out[1] = ENCODING_TABLE[((a<<4)&0x3F|(b>>4)&0x0F)];
out[2] = ENCODING_TABLE[((b<<2)&0x3F|(c>>6)&0x03)];
out[3] = ENCODING_TABLE[c&0x3F];
super.out.write(out,0,4);
}
|
Инетерсует либа для очереди, что то похожее на https://github.com/Automattic/kue только без redis
|
Вложений: 1
Кто-нибудь знает, как выстроить это всплывающее окно обратно в левую панель, рядом с "Favorites"?
Сейчас для достижения данного эффета приходится перезапускать IDE. Хотелось бы без перезапуска. |
Кто пишет на react, вы делали что то такое :
есть например root приложения redux,
ReactDOM.render(<App locale="en-US" userID={1} />, container);
и какой то внешний компонент который не зависит от основного приложения
ReactDOM.render(<OutsideComponent locale="en-US" userID={1} />, container);
? |
Обнаружил интересную такую багофичу в V8 касательно геттеров.
Изначально я пытался сравнить производительность вызова геттера с вызовом обычного метода. Тестировал в node.js v8.1.3, Ubuntu 16.04 LTS, Intel Core i3-5005U вот таким кодом:
let object1 = {
hello() {
return Math.random();
}
}
let object2 = {
get hello() {
return Math.random();
}
}
let heap1 = [];
let heap2 = [];
console.time("object1");
for (let i = 0; i < 1000000; i++) {
heap1.push(object1.hello());
}
console.timeEnd("object1");
console.time("object2");
for (let i = 0; i < 1000000; i++) {
heap2.push(object2.hello);
}
console.timeEnd("object2");
Результат получился довольно обидный - вызов геттера оказался почти в три раза медленней вызова метода (~275ms против ~95ms). Полез в гугл разбираться, почему так (по логике, особой разницы быть не должно, ведь правда?), оказалось вот что: при объявлении геттера в литерале объекта отключаются какие-то оптимизации из-за каких-то проблем с памятью (https://codereview.chromium.org/714883003, в подробностях не секу), и чтобы этого избежать, нужно устанавливать геттер через Object.defineProperty или, внезапно, литералом, но в прототип:
let object3 = {};
Object.defineProperty(object3, "hello", {
get() {
return Math.random();
}
})
let object4 = {
__proto__: {
get hello() {
return Math.random();
}
}
}
let heap3 = [];
let heap4 = [];
console.time("object3");
for (let i = 0; i < 1000000; i++) {
heap3.push(object3.hello);
}
console.timeEnd("object3");
console.time("object4");
for (let i = 0; i < 1000000; i++) {
heap4.push(object4.hello);
}
console.timeEnd("object4");
Тогда всё классно: и тот, и другой вариант одинаково исполняются за приемлимые ~93ms, что даже немного быстрее прямого вызова (там при повторных запусках наблюдается такой же разброс значений, но на три-четыре миллисекунды выше). В фф результат одинаково хреновый везде) у меня ~160ms. Всё в порядке :) В общем вот так вот. Может, кому-нибудь пригодится :) Судя по тикету на chromium.org штука эта довольно древняя и исправлять её не торопятся, так что в высоконагруженных проектах вполне может быть актуально. |
Сегодня я понял как случайно можно удалить данные с сервера...
Сегодня вместо rm *xsd я написал rm * xsd Слава богам что без -r не удаляет подпапки |
Кто-нибудь умеет работать с портами из ноды? А то я костыль на go юзаю =(
|
Tim, в каком смысле с портами? Можешь более конкретно написать вопрос?
|
нейросеть-копипастерша
Вложений: 1
|
Цитата:
|
Цитата:
|
Nexus,
nerv_, Мое мнение. Если эту задачу возмется реализовать какой-то гигант типо яндекса или гугла, с этой задачей они справятся, но результат все равно будет с ошибками и смешными несуразностями. Как например онлайн-переводчики. |
Цитата:
|
Народ, кто-то занимается чем то связанным с криптовалютами?
|
может у кого то будут идеи по этому вопросу https://toster.ru/q/469374
|
|
Node.js & Typescript
Всем привет!
Исторически так сложилось, что есть Node.js на сервере. И вроде бы все хорошо, если бы не... отсутствие типизации в JS как таковом, и как следствие, ошибки времени выполнения, вместо ошибок компиляции (интерпретации). В связи с чем, запрашиваю у вас шаринг опыта использования связки Node.js & Typescript. Конечно, если таковой имеется :) Спасибо. |
КТо знает что такое cumulative ttl (time to live) ?
|
cyber,
Википедия говорит, ttl - период жизни пакета данных в сети.Time_to_live -"Контроль TTL часто используются провайдерами для обнаружения трафика несанкционированного подключенного устройства." Предположу, что cumulative ttl - это момент взрыва пакета (окончательного его исчезновение):lol: |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 09:06. |