Как предотвратить загрузку модуля Sharp на клиенте Meteor? - PullRequest
0 голосов
/ 17 сентября 2018

Я использовал npm pkg Sharp в коллекции изображений сервера для преобразования imgs. Код сервера выглядит так:

import * as sharp from 'sharp';

export const Pictures = new Mongo.Collection('pictures');

export const PicturesStore = new UploadFS.store.GridFS({
    collection: Pictures,
    name: 'pictures',
    filter: new UploadFS.Filter({
        contentTypes: [ 'image/*' ],
    }),
    transformWrite(from, to, fileId, file) {
        const transform = sharp().resize(300, 300).min().crop().toFormat('jpeg', { quality });
        from.pipe(transform).pipe(to);
    },
})

Однако на клиенте он сообщает об ошибке:

cannot load native .node modules on the client.

На самом деле клиент не выполняет острые функции. Это относится только к PicturesStore, а также создать коллекцию минимонго для картинок.

В другом проекте он использует webpack на клиенте. Он может быть настроен на резкое резкое изображение с пустым фиктивным объектом.

Но как создать пустой фиктивный объект Sharp, чтобы предотвратить загрузку модуля Sharp на клиенте Meteor без веб-пакета?

1 Ответ

0 голосов
/ 17 сентября 2018

Оказывается, вам нужно написать пакет Meteor для определения различных файлов, загружаемых на клиент и сервер.В вашем package.js это выглядит так:

Package.onUse(function (api) {
    api.mainModule('sharp-client.js', 'client');
    api.mainModule('sharp-server.js', 'server');
});

В sharp-client.js это выглядит так:

export var Sharp = {};

В sharp-server.js это так:

import {
    checkNpmVersions
} from 'meteor/tmeasday:check-npm-versions';

checkNpmVersions({
    'sharp': '^0.20.5'
}, 'my:awesome-package');

export var Sharp = require('sharp');

сделано.

...