我已经使用nodejs创建了库,而webpack用于捆绑它,因此可以在客户端使用它。
但是,如果我尝试将捆绑的文件用于我的节点应用程序,它就不起作用。 那么,我如何创建可在客户端和服务器端工作的Isomorphic库?
答案 0 :(得分:2)
这不是服务器或客户端问题,而是使用模块加载系统的问题。
您可能已经知道那里的人使用 CommonJS (哪个节点使用), AMD (在客户端用来编写模块化javascript)和/或脚本标记(在客户端)加载javascript模块。因此,您应该以某种方式准备您的库,以便能够与这些模块加载系统中的任何一个一起使用。因此,有一个 UMD ( U niversal M 模块 D 定义)模式,使您的模块兼容所有这些模块系统(参见人们用来实现这种模式的UMD templates)。
构建和捆绑工具(如webpack,browserify,...)具有将模块捆绑为umd的功能,因此它与所有模块加载系统兼容:
<强>的WebPack 强>:
设置libraryTarget
和library
输出配置:
webpack.config.js
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 强>:
使用--standalone
(-s
)选项:
browserify main.js -s myModule -o myModule.js
答案 1 :(得分:0)
facebook使用React支持可以在客户端和服务器端使用的同构组件创建。
它的JSX概念有助于解决这个问题。
React with Node for Isomorphic
同构Javascript的好处:
更好的整体用户体验
搜索引擎可索引
更轻松的代码维护
免费渐进增强功能