Javascript 绑定到umd或commonjs时定义全局

Javascript 绑定到umd或commonjs时定义全局,javascript,node.js,rollupjs,Javascript,Node.js,Rollupjs,我有一个客户端应用程序,它使用一些浏览器全局属性,如元素或文档 我也希望在node.js中运行我的应用程序,目前我正在使用服务器中的覆盖这些全局变量,如下所示: const domino = require("domino"); const domimpl = domino.createDOMImplementation(); const document = domimpl.createHTMLDocument(); Object.assign(global, Element: domin

我有一个客户端应用程序,它使用一些浏览器全局属性,如
元素
文档

我也希望在node.js中运行我的应用程序,目前我正在使用服务器中的覆盖这些全局变量,如下所示:

const domino = require("domino");

const domimpl = domino.createDOMImplementation();
const document = domimpl.createHTMLDocument();

Object.assign(global, Element: domino.impl.Element, document};

const myApp = require('my-app');
我目前正在使用rollup捆绑不同版本的
我的应用程序
,我如何让rollup为
\u服务器
版本的
我的应用程序
自动执行此操作,这样
我的应用程序
的消费者就不必这样做了


我正在考虑编写自己的汇总插件,但我觉得覆盖全局似乎是一种常见做法;使用单独的条目文件而不是汇总插件。

只需添加以下内容,而不是一个汇总插件

if (typeof window ==== "undefined") {
  const domino = require("domino");    
  const domimpl = domino.createDOMImplementation();
  const document = domimpl.createHTMLDocument();    
  Object.assign(global, Element: domino.impl.Element, document};
}

// my-app code
您可能担心
domino
输入客户端代码。要解决此问题,请为服务器和客户端使用单独的捆绑包,将上述模拟代码包装在单独的文件中,并在您的
my app
主文件中使用以下用于服务器捆绑包的方法,类似于React

服务器主文件

require(‘./globals-mocking’);
// my-app client code
// my-app client code only
if (SERVER_ONLY) {
  module.exports = require('./my-app-server.js'); 
} else { 
  module.exports = require('./my-app-client.js'); 
}
客户端主文件

require(‘./globals-mocking’);
// my-app client code
// my-app client code only
if (SERVER_ONLY) {
  module.exports = require('./my-app-server.js'); 
} else { 
  module.exports = require('./my-app-client.js'); 
}
包的主文件

require(‘./globals-mocking’);
// my-app client code
// my-app client code only
if (SERVER_ONLY) {
  module.exports = require('./my-app-server.js'); 
} else { 
  module.exports = require('./my-app-client.js'); 
}
使用汇总并仅为服务器条目定义
SERVER\u
()。如果您使用UglifyJS或simlilar工具来消除死代码,您就不会有
domino
和重复的服务器代码

编辑:注意到一个小问题。如果(仅服务器_){,则条件应为
。对服务器条目文件使用以下定义

  plugins: [
    replace({
      SERVER_ONLY: JSON.stringify(true)
    })
  ]

谢谢!这就是我要找的--但是当我这样做的时候,我的主文件绑定结果是这样的:
(函数(全局,工厂){typeof exports=='object'&&typeof module!='undefined'?factory():typeof define=='function'&&define.amd?define(工厂):(工厂());}(这个,(函数(){'use strict';module.exports=require('./server');}));
这是一个UMD模块…请注意单个“require('./server')”就是这样,它没有解决require。