我有一个使用 webpack 2 编译资产的同构应用程序。我现在添加了分块,System.import
它在 webpack 端有效,但在没有找到函数的服务器端无效。
知道我该如何解决这个问题吗?
我有一个使用 webpack 2 编译资产的同构应用程序。我现在添加了分块,System.import
它在 webpack 端有效,但在没有找到函数的服务器端无效。
知道我该如何解决这个问题吗?
有几个选项可用于System.import
使用同构/服务器端渲染:
特征检测System
和 polyfill
Node 允许您require()
在多个地方调用,并且System.import
按以下方式填充应该可以工作:
if (typeof System === "undefined") {
var System = {
import: function(path) {
return Promise.resolve(require(path));
}
};
}
如果您正在寻找更健壮的实现,还有es6-micro-loader,它实现了一个System
在浏览器和节点中都可以使用的polyfill。
使用babel-plugin-system-import-transformer替换System.import
为等效的 UMD 模式
即采用以下形式:
System.import('./utils/serializer').then(function(module){
console.log(module);
});
并将其转换为:
new Promise(function (resolve, reject) {
var global = window;
if (typeof global.define === 'function' && global.define.amd) {
global.require(['utilsSerializer'], resolve, reject);
} else if (typeof module !== 'undefined' && (module.exports && typeof require !== 'undefined') ||
typeof module !== 'undefined' && (module.component && (global.require && global.require.loader === 'component'))) {
resolve(require('./utils/serializer'));
} else {
resolve(global['utilsSerializer']);
}
}).then(function(module){
console.log(module);
});
或者
使用面向 Node 的 Webpack 构建(将使用 require 加载块):
webpack --target node
这些选项之一可能适合您的需求:
System.import
除require.ensure
)。System.import
它只使用 require() module返回一个已解决的Promise。