Копирование каталога tinymce skin с помощью webpack

#vue.js #webpack #webpacker

#vue.js #webpack #webpacker

Вопрос:

Согласно документации к TinyMCE для загрузки файлов Webpack, следующий фрагмент будет копировать каталог скинов TinyMCE:

 require.context(
  'file?name=[path][name].[ext]amp;context=node_modules/tinymce!tinymce/skins',
  true,
  /.*/
);
  

Я поместил этот фрагмент в app/assets/javascript/tinymce.vue прямо перед моими инструкциями include для tinymce. К сожалению, я получаю следующую ошибку, выдаваемую postcss при попытке компиляции webpack:

 % rails webpacker:compile

Webpacker is installed 🎉 🍰
Using /repos/myapp/config/webpacker.yml file for setting up webpack paths
CompilingCompilation failed:
CssSyntaxError: /repos/myapp/js/skins/content/default/content.css:2:1: Unknown word
    at Input.error (/repos/myapp/node_modules/postcss/lib/input.js:130:16)
    at Parser.unknownWord (/repos/myapp/node_modules/postcss/lib/parser.js:563:22)
    at Parser.other (/repos/myapp/node_modules/postcss/lib/parser.js:168:12)
    at Parser.parse (/repos/myapp/node_modules/postcss/lib/parser.js:77:16)
    at parse (/repos/myapp/node_modules/postcss/lib/parse.js:17:12)
    at new LazyResult (/repos/myapp/node_modules/postcss/lib/lazy-result.js:60:16)
    at Processor.<anonymous> (/repos/myapp/node_modules/postcss/lib/processor.js:138:12)
    at Processor.process (/repos/myapp/node_modules/postcss/lib/processor.js:117:23)
    at Function.creator.process (/repos/myapp/node_modules/postcss/lib/postcss.js:148:43)
    at OptimizeCssAssetsWebpackPlugin.processCss (/repos/myapp/node_modules/optimize-css-assets-webpack-plugin/src/index.js:65:21)
    at Object.processor (/repos/myapp/node_modules/optimize-css-assets-webpack-plugin/src/index.js:11:18)
    at each (/repos/myapp/node_modules/last-call-webpack-plugin/src/index.js:150:10)
    at arrayEach (/repos/myapp/node_modules/lodash/_arrayEach.js:15:9)
    at forEach (/repos/myapp/node_modules/lodash/forEach.js:38:10)
    at OptimizeCssAssetsWebpackPlugin.process (/repos/myapp/node_modules/last-call-webpack-plugin/src/index.js:147:5)
    at compilation.hooks.optimizeChunkAssets.tapPromise.chunks (/repos/myapp/node_modules/last-call-webpack-plugin/src/index.js:178:28)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/repos/myapp/node_modules/tapable/lib/HookCodeFactory.js:32:10), <anonymous>:8:17)
    at AsyncSeriesHook.lazyCompileHook (/repos/myapp/node_modules/tapable/lib/Hook.js:154:20)
    at hooks.additionalAssets.callAsync.err (/repos/myapp/node_modules/webpack/lib/Compilation.js:1311:36)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/repos/myapp/node_modules/tapable/lib/HookCodeFactory.js:32:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (/repos/myapp/node_modules/tapable/lib/Hook.js:154:20)
    at hooks.optimizeTree.callAsync.err (/repos/myapp/node_modules/webpack/lib/Compilation.js:1307:32)
    at AsyncSeriesHook.eval [as callAsync] (eval at create (/repos/myapp/node_modules/tapable/lib/HookCodeFactory.js:32:10), <anonymous>:6:1)
    at AsyncSeriesHook.lazyCompileHook (/repos/myapp/node_modules/tapable/lib/Hook.js:154:20)
    at Compilation.seal (/repos/myapp/node_modules/webpack/lib/Compilation.js:1244:27)
    at hooks.make.callAsync.err (/repos/myapp/node_modules/webpack/lib/Compiler.js:624:17)
    at _done (eval at create (/repos/myapp/node_modules/tapable/lib/HookCodeFactory.js:32:10), <anonymous>:9:1)
    at _err1 (eval at create (/repos/myapp/node_modules/tapable/lib/HookCodeFactory.js:32:10), <anonymous>:32:22)
    at _addModuleChain (/repos/myapp/node_modules/webpack/lib/Compilation.js:1095:12)
    at processModuleDependencies.err (/repos/myapp/node_modules/webpack/lib/Compilation.js:1007:9)
    at processTicksAndRejections (internal/process/next_tick.js:74:9)
  

rails webpacker:compile компилируется в public/packs каталог, и сообщение об ошибке ссылается на каталог, который не существует. Также следует отметить, что строка 2 из /node_modules/tinymce/skins/content/default/content.css является просто частью блока комментариев в css:

 /**
 * Copyright (c) Tiny Technologies, Inc. All rights reserved.
 * Licensed under the LGPL or a commercial license.
 * For LGPL see License.txt in the project root for license information.
 * For commercial licenses see https://www.tiny.cloud/
 */
  

Я думаю, мне нужно использовать другой загрузчик (например style-loader ) для компиляции css… но я не совсем понимаю, как это сделать, используя встроенный синтаксис webpack.

Любая помощь приветствуется!

Ответ №1:

Согласно file-loader документации, я могу указать путь вывода через outputPath .

Что касается webpack style-loader , я узнал, что вы можете отключить другие загрузчики, добавив к желаемому встроенному синтаксису префикс ! .

 // copy tinymce's skins directory into public/packs
require.context(
  '!file-loader?name=[path][name].[ext]amp;context=node_modules/tinymceamp;outputPath=js!tinymce/skins',
  true,
  /.*/
);
  

Комментарии:

1. Куда это приведет при настройке Rails Webpacker? Конфигурационного файла webpacker нет.

2. Нашел место для использования этого require.context на TinyMce.js файл, и это сработало. Оставляем этот комментарий здесь, если кто-то еще столкнулся с такой же проблемой.

Ответ №2:

У меня была такая же проблема. Это было наше исправление:

Удалить .css из вашего static_assets_extensions: списка в вашем webpacker.yml .

Комментарии:

1. У меня это не сработало, я исключил that .css из списка, но все равно получил ошибку «неизвестное слово».