Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2021, 17:04
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

webpack v5: loader package.json => js код
Пытаюсь написать loader, который загружает package.json и по его содержимому генерирует нужный мне javascript код.

Однако получаю ошибку
SyntaxError: Unexpected token / in JSON at position 0 while parsing near '/* Д  инамические импо...'

Собственно понятно что webpack после моего загрузчика пытается ещё что-то применить и считает что формат JSON и из-за этого ошибка. В частности ругается на комментарий в начале.

В webpack 4 я делал так чтобы изменить тип с json на javascript
const requiredType = 'javascript/auto';
const factory = this._compilation.dependencyFactories.get(LoaderDependency);
this._module.type = requiredType;
this._module.generator = factory.getGenerator(requiredType);
this._module.parser = factory.getParser(requiredType);

но в webpack 5 это не работает, так как ругается на отсутствующий метод getGenerator (как оказалось потому что factory = undefined). К тому же переменные начинающиеся с _ как бы намекают что это какое-то шаманство.

В связи с этим вопрос: что нужно сделать чтобы подключая вот так
import aaa from '!my-loader!./package.json';
чтобы я получал javascript код который генерирует мой loader?

Последний раз редактировалось Shasoft, 06.04.2021 в 17:16.
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2021, 21:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Ну попробуй
import aaa from '!!my-loader!./package.json';
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2021, 21:23
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Сообщение от Aetae Посмотреть сообщение
Ну попробуй
import aaa from '!!my-loader!./package.json';
Пробовал, не помогает.
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2021, 21:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

На самом деле - это невозможно. Двойное восклицание гарантировано отрубает любые лоадеры кроме указанного.
Скорее всего косяк где-то в другом месте, но для гарантии можно сделать следующее:
1. Удалить node_modules/.cache - девтулзы порой агрессивно кэшрются.
2. Попробовать использовать raw-loader вместо вашего и посмотреть что он выдаёт.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2021, 21:49
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

В webpack 5 raw-loader DEPREACTED for v5: please consider migrating to asset modules.
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2021, 22:02
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

Поставил raw-loader
./package.json (./node_modules/raw-loader/dist/cjs.js!./package.json)
Module parse failed: Unexpected token e in JSON at position 0 while parsing near 'export default "{\n ...'
File was processed with these loaders:
 * ./node_modules/raw-loader/dist/cjs.js
You may need an additional loader to handle the result of these loaders.
  SyntaxError: Unexpected token e in JSON at position 0 while parsing near 'expo  rt default "{\n ...'
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2021, 22:05
Аватар для Shasoft
Профессор
Отправить личное сообщение для Shasoft Посмотреть профиль Найти все сообщения от Shasoft
 
Регистрация: 03.03.2009
Сообщений: 156

- JSON.parse

- index.js:7 parseJson
[q-ssa]/[json-parse-better-errors]/index.js:7:17

- JsonParser.js:16 JsonParser.parse
[q-ssa]/[webpack]/lib/JsonParser.js:16:16

- NormalModule.js:482
[q-ssa]/[webpack]/lib/NormalModule.js:482:32

- NormalModule.js:358
[q-ssa]/[webpack]/lib/NormalModule.js:358:12

- LoaderRunner.js:373
[q-ssa]/[loader-runner]/lib/LoaderRunner.js:373:3

- LoaderRunner.js:214 iterateNormalLoaders
[q-ssa]/[loader-runner]/lib/LoaderRunner.js:214:10

- LoaderRunner.js:221 iterateNormalLoaders
[q-ssa]/[loader-runner]/lib/LoaderRunner.js:221:10

- LoaderRunner.js:236
[q-ssa]/[loader-runner]/lib/LoaderRunner.js:236:3

- LoaderRunner.js:130 runSyncOrAsync
[q-ssa]/[loader-runner]/lib/LoaderRunner.js:130:11
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2021, 23:08
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

В общем заставил ты меня зарыться в это говно: виновата новая суперфича "asset modules"(теперь там две разных системы для одного и того же, блджад).
Чтобы твой loader заработал, надо явно переопределить тип в самом конфиге:
{
  test: /\.json$/,
  use: [
    'raw-loader'
  ],
  *!*type: 'javascript/auto'*/!*
}

Ну или, если нужно только локально:
{
  resourceQuery: /^\?raw-loader/,
  use: [
    'raw-loader'
  ],
  type: 'javascript/auto'
}

import aaa from './package.json?raw-loader';

А надёжнее и универсальнее:
{
  resourceQuery: /fuck-assets/,
  type: 'javascript/auto'
}

import aaa from '!raw-loader!./package.json?fuck-assets';


Это всё есть в документации, но загорелось у меня знатно. Просто взяли и обосрали стройную систему loader'ов. Теперь вообще непонятно через какую жопу грузится какой файл, что и где переопределять.
__________________
29375, 35

Последний раз редактировалось Aetae, 06.04.2021 в 23:32.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После проверки js выполнить php код jess23 Общие вопросы Javascript 11 20.02.2017 18:13
webpack sass loader падает kuzroman Сборка проекта, утилиты 1 07.10.2015 16:07
Управляющие конструкции js и код php antserg Общие вопросы Javascript 2 11.06.2011 12:38
Изменить/удалить код HTML генерированный JS SanaPo Общие вопросы Javascript 2 11.02.2011 19:26
Как проиндексировать картинки HTML код которых генерируется на JS greatilya Оффтопик 9 22.09.2010 07:42