如何防止在 Meteor 客户端上加载 Sharp 模块?
How to prevent loading Sharp module on Meteor client?
我在服务器的图片集上使用 npm pkg Sharp 来转换 img。服务器代码是这样的:
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.
客户端实际上并没有运行 sharp 功能。它只引用 PicturesStore 并且还为 Pictures 创建一个 minimongo 集合。
在另一个项目中,它在客户端使用了webpack。它可以配置为用空的虚拟对象解析尖锐。
但是如何创建一个空的虚拟 Sharp 对象来防止在没有 webpack 的情况下在 Meteor 客户端上加载 Sharp 模块?
原来你得写一个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');
完成。
我在服务器的图片集上使用 npm pkg Sharp 来转换 img。服务器代码是这样的:
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.
客户端实际上并没有运行 sharp 功能。它只引用 PicturesStore 并且还为 Pictures 创建一个 minimongo 集合。
在另一个项目中,它在客户端使用了webpack。它可以配置为用空的虚拟对象解析尖锐。
但是如何创建一个空的虚拟 Sharp 对象来防止在没有 webpack 的情况下在 Meteor 客户端上加载 Sharp 模块?
原来你得写一个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');
完成。