如何从Meteor的客户端包中排除某些node_modules?

时间:2016-11-02 03:03:14

标签: meteor npm babeljs

Meteor 1.3开始,npm是推荐的打包系统,我现在在node_modules目录中有服务器端和客户端包。 Meteor尝试将所有这些捆绑到一个巨大的modules.js文件中。

让meteor完全忽略文件的唯一方法是更改​​文件或目录名称(12)。

但我不想完全忽略这些文件 - 我只需要在服务器端部署一些模块,有些只在客户端部分。

有没有办法让Meteor只在客户端包中包含某些节点模块,可能是通过广告素材命名或黑客攻击.babelrc

2 个答案:

答案 0 :(得分:0)

所有内容都需要进入服务器上的捆绑包。当您访问您的网站时,服务器会使您的HTML,CSS和JS可用并加载到浏览器中。只有浏览器所需的节点模块才会被加载。

没有必要这样做:)

答案 1 :(得分:0)

将它们隐藏在 server 文件夹中并间接导入它们。

将某些npm node_modules 排除在大量 modules.js 文件中,并防止将无用的兆字节脚本发送到客户端:有条件require一个文件本身imports来自服务器文件夹中的模块。

像这样:

/* /my-import-file.js */

import { Meteor } from 'meteor/meteor';

if (Meteor.isServer) {
  module.exports = require('./server/server-only-file');
}

实际导入大型无用的客户端npm模块的文件:

/* /server/server-only-file.js */

// Import some modules that will NOT be sent to the client
import mailgun from 'mailgun.js';
import cheerio from 'cheerio';
import juice from 'juice';

export { juice, cheerio, mailgun };

您的其他代码可以这样做:

import { Meteor } from 'meteor/meteor';
import myImport from '/my-import-file'

if(Meteor.isServer){
  myImport.doServerOnlyStuff();
}