Size: a a a

2021 November 01

Я

Ярослав in JS
Такое лучше не в хромоконсоли проверять, т.к. там есть нюансы со скоупом
источник

V

Veli in JS
та не, явно результат FD можно использовать как выражение везде, это 100%
источник

Я

Ярослав in JS
Наверное да, результатом же экземпляр объекта является.
источник

V

Veli in JS
на mdn функция - это инструкция
источник

V

Veli in JS
да, я тоже об этом подумал
источник

Я

Ярослав in JS
Объекта типа function, если быть точным. Как и в случае FE.
источник

V

Veli in JS
короче это инструкция создать объект))
источник

Я

Ярослав in JS
Из-за того что язык интерпретируемый, классификация ключевых слов слегка запутанной становится. То есть, инструкции JS чуть другие чем инструкции в компилируемых языках, которые более... "просты и прямолинейны", что ли...
источник

Я

Ярослав in JS
Что-то я с роллапом затупил - подключаю его к SSGшке, и не получается отрезолвить относительный импорт из входного js-файла... Проблема похоже с путями. Помогите понять, в чем допущена ошибка:
const rootPath = /* путь к корню проекта - точно корректный */,
     distPath = path.resolve(rootPath, 'dist/'),
     mainModule = 'main.js';
const inputOpts = {
 // (1) уже использую абсолютный путь в энтри, чтобы наверняка...
 input: path.resolve(rootPath, 'src/scripts/', mainModule),
};
const outputOpts = {
 dir: distPath,
 format: 'iife',
 sourcemap: isDev,
 plugins: [
   nodeResolve({
     // (2) ...и попробовал явно указывать корневой путь плагину
     rootDir: path.resolve(rootPath, 'src/scripts/'),
   }),
   commonJs(),
 ],
};

Вызов роллапа соответственно
const bundle = await rollup(inputOpts),
     { output } = await bundle.generate(outputOpts);
, и при содержимом main.js
import './modules';    // импортирую ./modules/index.js, он есть
странная ошибка
Error: Could not resolve './modules' from src/scripts/main.js
, как будто нод-резолв не отрабатывает вовсе.

Если же заменить путь в main.js на полный (import './modules/index.js';), то все работает корректно, т.к. путь становится понятным роллапу, плагин уже не участвует.
И если тот же конфиг использовать запуская сборку из папки где путь к src/ является относительным, то node-resolve отрабатывает корректно даже без указания rootDir.
Где у меня накосячено? Похоже что именно с rootDir, но вроде все сделал по ридми...
источник

Я

Ярослав in JS
В package.json все по-дефолту, без всяких странных настроек.
Разве что использую пакет esm в nodeскриптах, т.к. генерилка еще только CJS понимает... но это не мешает правильной работе плагина когда src/ относительный, так что проблемы со стороны esm-обертки думаю можно исключить (тем более что она "прозрачная").
источник

Я

Ярослав in JS
Еще интересность: меняю путь в импорте внутри main.js на import 'modules'; (то есть, убрав ./), и node-resolve работает корректно, параметр rootDir явно подхватывается. То есть, именно и только с относительным путем в импорте ломается. WTF 🤔
источник

YK

Yury Khmarin in JS
спасибо чисто один кто раскидал как есть)
источник

Я

Ярослав in JS
Не за что: я просто взял цитату автора концепции, из вики :)
источник

YK

Yury Khmarin in JS
зато другие пантовались незнанием, говорили что нет) легче сказать что нет, чем проверить)
источник

Я

Ярослав in JS
Эти вещи просто из области тонких материй... то есть, применяя концепцию к другим языкам (не к АЛГОЛу) так или иначе уходим в субъективщину. Истины в ней нет, понятное дело, вопрос степени приближенности к общепринятому мнению.
источник

Я

Ярослав in JS
Отвечая на свой же вопрос выше, о плагине @rollup/plugin-node-resolve - проблема была в том что я как олень не в тот объект засунул параметр plugins конфига 🤦‍♂️ и плагин просто не применялся на этапе бандлинга. Соотв., решение в том же случае выглядит подобным образом:
const inputOpts = {
 input: path.resolve(rootPath, 'src/scripts/', mainModule),
};
const outputOpts = {
 dir: distPath,
 format: 'iife',
 sourcemap: sourceMap,
};
const pluginOpts = {
 plugins: [
   nodeResolve({ rootDir: scriptsPath }),
   commonJs(),
 ],
};
// ....
const bundle = await rollup({ ...inputOpts, ...pluginOpts }),
источник

VC

Valera CSS_Junior in JS
Сделали PWA версию сайта написанного на Реакт. Пока текстим всей  командой в Chrome на смартфонах. Текстим так: удаляем PWA если раньше ставили, удаляем кеш, заходим на наш сайт. Внизу страницы предложение "Добавить приложение 'наш сайт' на главный экран" не у всех появляется. Пункт "Установить приложение" в меню правда у всех появляется. Можете высказать предположение почему предложение внизу страницы в Chrome появляется не у всех?
источник

Я

Ярослав in JS
Раз у некоторых действие установки появляется, значит маловероятно что проблема в manifest.json, и надо чекать то что остается... а именно - выполнение кода сервисворкера (используя удаленную отладку).

Прост насколько помню сам принцип создания PWA, там только от этих двух составляющих и зависит результат... но практики с пвашками очень мало имею, так что утверждать не могу, конечно.
источник

VC

Valera CSS_Junior in JS
ок. спасибо
источник

PD

Petya Danchuk in JS
Изучаю Storybook. Для небольшого проекта на реакт сделал стори для простых компонентов. Заметил что иногда в компонентах верстка едет из-за того, что они не находятся в CSS контейнере как на сайте. А можно ли как-то сделать чтобы компоненты в Storybook stories все находились в контейнере? А то я каждый по отдельности в каждом стори оборачиваю теперь.
источник