app.use( // 5
express.static( // 4
path.join( // 3
__dirname, // 1
'public' // 2
)))
<script src="/reglog.js"></script>
npm i
это короткий вариант npm install
npm i name
установит пакет name версии отмеченной тегом latest (тэг по умолчанию)npm i name@tag
установит пакет name версии отмеченной тегом tagnpm i name@5
установит пакет name версии 5.x.x где x.x - последний из 5npm i name@5.3
установит пакет name версии 5.3.x где x - последний из 5.3npm i name@5.3.1
установит пакет name версии 5.3.1--save
или его короткий вариант -S
сохранит зависимость в package.json в секции dependencies, с некоторых пор это поведение по умолчанию при наличии package.json--save-dev
или его короткий вариант -D
сохранит зависимость в package.json в секции devDependenciesvar input1 = document.getElementById("input1");
var input2 = document.getElementById("input2");
var button = document.getElementById("button");
button.onclick = function(){
var result = parseInt(input1.value) + parseInt(input2.value);
document.body.append(result);
}
Собираю проект при помощи GulpGulp ничего собирать не может, так как Gulp - это task runner (запускатель задач если по-русски), собирать может то, что Gulp запускает, например bundler (сборщик) вроде Webpack или Rollup или просто конкатенатор файлов.
Если я подключаю один и тот же модуль npm, к примеру JQuery, к разным файлам, а потом эти файлы подключаю к main.js - будут ли модули из npm дублироваться?зависит от того, чем все таки собираете, если обычная конкатенация файлов - то да, будет дублирование. А если Webpack или Rollup - нет.
Может у него было тяжелое начало, но сейчас, можно ли его считать полноценным?JS тьюринг полный язык и всегда им был. Тьюринг полнота означает, что на нем можно посчитать все что в принципе вычислимо.
Просто в нем даже импорт файла нормально нельзя сделать (даже в css он есть хоть и не полный)...Уже 5 лет как можно, в отличии, например, от C, где отдельные модули до сих пор нужно линковщиком собирать после компиляции. Так что, по Вашему C тоже не полноценный теперь?
Нету многих приколов, фишек и функций, хотя я понимаю что внедрять их поздно, и для браузера он создавался.Хотелось бы конкретики, каких таких "приколов" Вам не хватает? Вот тут ребята открыты к предложениям: https://github.com/tc39/ecma262/blob/master/CONTRI...
function cloneOrCreateDate(date) {
return date instanceof Date ? new Date(date) : new Date();
}
function getMidnightDate(date) {
const d = cloneOrCreateDate(date);
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
return d;
}
function addDaysToDate(days, date) {
const d = cloneOrCreateDate(date);
d.setDate(d.getDate() + days);
return d;
}
function timeOffset(d1, d2) {
return Math.abs(d1 - d2);
}
setTimeout(() => {
// логика в полночь
}, timeOffset(Date.now(), addDaysToDate(1, getMidnightDate())));
declare namespace XXX {
// по сути просто поле XXX.a
let a: number;
// то же поле XXX.b но уже const
// современный ts позволяет делать поля readonly, но раньше так было нельзя
const b: number;
// функция, по сути метод XXX.c()
function c(): void;
// а вот вложенный тип через тип объекта не объявить, а в namespace можно
type T = number | string;
}
declare module '*.png' {
const url: string;
export default url;
}
declare module '*.css' {
const classNames: Record<string, string>;
export default classNames;
}
let a;
t >>>= 0;
if(t < 128) a = 1;
else if(t < 16384) a = 2;
else if(t < 2097152) a = 3;
else if(t < 268435456) a = 4;
else a = 5;
this.tail.next = new f(a, t);
this.tail = this.tail.next;
this.len += this.tail.len;
return this;
Можно ли обойтись обычным js?Можно. TypeScript лишь добавляет к JavaScript статическую типизацию в компайл-тайм. После компиляции будет все тот же JS.
Какие будут плюсы?Главный плюс, ИМХО, - скорость разработки за счет подсказок IDE и автодополнения, больше авторефакторингов. Ну и возможность ограничить использование функций/методов от нежелательного использования тоже плюс. А если еще и проектировать доменную модель на типах, то можно сразу видеть, если что-то не сходится, еще до написания логики.
Не будет ли много лишней писанины по сравнению с чистым js?Большинство типов TypeScript способен вывести. Далеко не Хиндли-Милнер конечно, но тоже хорошо. Я пишу больше в ФП стиле, с редкой примесью структурно-процедурного при описании эффектов, так у меня явные указания типов присутствуют только в сигнатурах функций. В самой логике код неотличим от обычного JS, но с хорошей проверкой типов.
Будет ли сложно хранить скомпилированный js?Как и любые другие артефакты сборки, скомпилированный JS хранить не нужно. Компилируйте непосредственно перед выкладыванием на продакшен, а в git храните лишь TS код + настройки компилятора. А в dev среде вообще можно запускаться через модуль ts-node.
type Validator<U extends string, A extends ReadonlyArray<string>> =
(U extends A[number] ? true : false) extends true ? A : never;
type U = 'foo' | 'bar';
const arr0 = ['foo'] as const;
const arr1 = ['bar'] as const;
const arr2 = ['foo', 'bar'] as const;
type A0 = Validator<U, typeof arr0>; // never
type A1 = Validator<U, typeof arr1>; // never
type A2 = Validator<U, typeof arr2>; // readonly ['foo', 'bar']
const _check0: A0 = arr0; // error
const _check1: A1 = arr1; // error
const _check2: A2 = arr2;
async function checkUser(login, password) {
const ad = new ActiveDirectory(ad_config)
const auth = await new Promise((resolve, reject) => {
ad.authenticate(login, password, (err, auth) => {
if (err) {
return reject(err)
}
resolve(auth)
})
})
return auth
}