Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建同时在客户端和服务器端工作的javascript库(同构)?_Javascript_Node.js_Isomorphic Javascript - Fatal编程技术网

如何创建同时在客户端和服务器端工作的javascript库(同构)?

如何创建同时在客户端和服务器端工作的javascript库(同构)?,javascript,node.js,isomorphic-javascript,Javascript,Node.js,Isomorphic Javascript,我已经使用nodejs创建了库,并使用webpack将其绑定,以便在客户端使用 但是,如果我尝试将捆绑的文件用于我的节点应用程序,它将不起作用。 那么,如何创建在客户端和服务器端都能工作的同构库呢?facebook使用支持创建同构组件,您可以在客户端和服务器端使用 它的JSX概念有助于解决这个问题 同构Javascript的好处: 更好的总体用户体验 可索引搜索引擎 更容易的代码维护 免费渐进式增强 这不是服务器或客户端的问题,而是使用的模块加载系统的问题 您可能已经知道,人们使用Comm

我已经使用nodejs创建了库,并使用webpack将其绑定,以便在客户端使用

但是,如果我尝试将捆绑的文件用于我的节点应用程序,它将不起作用。 那么,如何创建在客户端和服务器端都能工作的同构库呢?

facebook使用支持创建同构组件,您可以在客户端和服务器端使用

它的JSX概念有助于解决这个问题

同构Javascript的好处:

  • 更好的总体用户体验

  • 可索引搜索引擎

  • 更容易的代码维护

  • 免费渐进式增强


这不是服务器或客户端的问题,而是使用的模块加载系统的问题

您可能已经知道,人们使用CommonJS(节点使用的)、AMD(在客户端用于编写模块化javascript)和或脚本标记(在客户端)来加载javascript模块。因此,您应该以某种方式准备您的库,以便能够与这些模块加载系统中的任何一个一起使用。因此,有一个UMDUniversalModuleD定义)模式,使您的模块与所有这些模块系统兼容(请参见使用哪些人实现此模式)

构建和捆绑工具(如webpack、browserify等)具有将模块捆绑为umd的功能,因此它与所有模块加载系统兼容:

网页包

设置
libraryTarget
library
输出配置:

webpack.config.js

浏览化

使用
--standalone
-s
)选项:


如果你真的需要的话,不要使用不适合双方的东西,或者(至少)模仿他们的工作。
module.exports = {
  entry: './myModule.js',
  output: {
      filename: './dist/myModule.js',
      // export to AMD, CommonJS, or window
      libraryTarget: 'umd',
      // set window global to this name
      library: 'myModule'
  }
};
browserify main.js -s myModule -o myModule.js