Метеоритный импорт SVG как компонент React - PullRequest
0 голосов
/ 06 июня 2018

Я не могу сделать явное import svg from './path/to/file.svg' в проекте Meteor-React.

Согласно этому сообщению " импорт файлов SVG внутри метеора ", этот фрагмент кода должен решитьпроблема:

server / main.js

Meteor.methods({
    'svg.get'(data) {
        return Assets.getText(data.path);
    }
});

client / main.js

const getSVG = async (path) => {
    return await new Promise((resolve, reject) => {
        Meteor.call('svg.get', { path }, (err, res) => {
            if (err) reject('Something went wrong');
            resolve(res);
        });
    });
}

const SVG = await getSVG('some/path/relative/to/private/file.svg') 

Ноэто не работает для меня в Meteor 1.7+, я получаю эту ошибку:

I20180606-11:42:09.264(-3)? Exception while invoking method 'svg.get' Error: Unknown asset: /var/www/coreui-meteor-react/public/img/brand/logo.svg
I20180606-11:42:09.392(-3)?     at getAsset (/var/www/coreui-meteor-react/.meteor/local/build/programs/server/boot.js:329:19)
I20180606-11:42:09.392(-3)?     at Object.getText (/var/www/coreui-meteor-react/.meteor/local/build/programs/server/boot.js:340:16)
I20180606-11:42:09.393(-3)?     at MethodInvocation.svg.get (server/main.js:6:21)
I20180606-11:42:09.393(-3)?     at maybeAuditArgumentChecks (packages/ddp-server/livedata_server.js:1767:12)
I20180606-11:42:09.393(-3)?     at DDP._CurrentMethodInvocation.withValue (packages/ddp-server/livedata_server.js:719:19)
I20180606-11:42:09.393(-3)?     at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1189:12)
I20180606-11:42:09.394(-3)?     at DDPServer._CurrentWriteFence.withValue (packages/ddp-server/livedata_server.js:717:46)
I20180606-11:42:09.394(-3)?     at Meteor.EnvironmentVariable.EVp.withValue (packages/meteor.js:1189:12)
I20180606-11:42:09.394(-3)?     at Promise (packages/ddp-server/livedata_server.js:715:46)
I20180606-11:42:09.394(-3)?     at new Promise (<anonymous>)
I20180606-11:42:09.395(-3)?     at Session.method (packages/ddp-server/livedata_server.js:689:23)
I20180606-11:42:09.395(-3)?     at packages/ddp-server/livedata_server.js:559:43

Даже если я добавлю здесь ключевое слово await:

const logo = await svg.get('/img/brand/logo.svg');

Выдает эту ошибку:

While building for web.browser:
   client/containers/DefaultLayout/DefaultHeader.js:9:13: await is a reserved word (9:13)

   While processing files with ecmascript (for target web.browser):
   client/containers/DefaultLayout/DefaultHeader.js:9:13: /var/www/coreui-meteor-react/client/containers/DefaultLayout/DefaultHeader.js: await is a reserved word (9:13)

   7 |
   8 |
   >  9 | const logo = await svg.get('/img/brand/logo.svg');
   |              ^
   10 | const sygnet = await svg.get('/img/brand/sygnet.svg');
   11 |
   12 | const propTypes = {

Любое решение для классического импорта SVG из проекта React в Meteor-React?

1 Ответ

0 голосов
/ 07 июня 2018

Возможно, вы указали неправильный путь.

Согласно документации Assets.getText аргумент должен быть:

Путь активаотносительно подкаталога private приложения.

Исходя из ошибки, вы предоставляете /var/www/coreui-meteor-react/public/img/brand/logo.svg, где вам нужно сделать только img/brand/logo.svg и переместить файл из public to private директория вашего приложения.

Если вы хотите получить доступ к какому-либо файлу из директории public, вы можете сделать это в любое время на клиенте, используя прямую ссылку.В этом случае your-app.com/img/brand/logo.svg


Вторая ошибка не связана.Чтобы использовать ключевое слово await, ваш код должен быть внутри функции async, это не разрешено в обычных функциях или в коде верхнего уровня.

...