从requirejs迁移到webpack

时间:2017-08-18 22:19:57

标签: javascript node.js webpack requirejs

我将基于require.js的项目迁移/移动到webpack v3。由于我的所有模块都使用以下语法:

    define([modules,..], function(mod1,..) 

其中声明了要使用的模块,并将模块分配给匿名函数中的变量。从webpack的v2开始,这似乎已被弃用了。我无法找到有关此内容的任何信息(web pack v1的文档除外)。

我应该将所有模块重写为commonjs(包括依赖项)还是有任何智能方式来使用AMD模块?

非常感谢:-) 问候

2 个答案:

答案 0 :(得分:2)

AMD从来没有在requirejs之外找到太多用途,所以你可能需要转换。有些工具可以提供帮助:

https://github.com/anodynos/uRequire/wiki/nodejs-Template)有一些警告:

  • 将模型/ PersonModel等路径的运行时转换为../../models/PersonModel,具体取决于调用它的位置。您仍然可以将构建时翻译的bundleRelative路径添加到nodejs fileRelative等效路径中。

对于大多数项目来说,这不是问题。

  • 无法使用require的异步版本([' dep'],function(dep){...})

您应该能够使用require的同步版本。如果使用webpack2,您可以使用System.importrequire.ensure

  • 无法运行requirejs加载程序插件,例如text!...或json!...

您将找到所有这些插件的webpack版本

  • 没有/的映射,即webRootMap等,或使用requirejs.config' s {baseUrl:" ...."}或{路径:" LIB":" ../../ LIB"}

可以使用https://www.npmjs.com/package/babel-plugin-module-alias

复制

答案 1 :(得分:0)

CaptEmulation 的答案对于较新的Webpack版本无效。 Webpack本机支持AMD(无需安装其他加载程序,也无需安装插件)。此处提供了完整的说明:https://webpack.js.org/api/module-methods

当人们尝试将基于RequireJS的内部版本重写为Webpack时,这一事实可能很容易被忽略,因为RequireJS使用相对路径而没有尾随// General purpose function fetchGeneral(...args) { return fetch(...args) .then((response) => { if (!response.ok) { throw new Error("HTTP error " + response.status); } return response; }); } // JSON function fetchJSON(...args) { return fetch(...args) .then((response) => { if (!response.ok) { throw new Error("HTTP error " + response.status); } return response.json(); }); } ,例如

./

如果不进行其他配置(假设define('app/dep1', function(dep1) { ... }); require.config.js都在同一个目录中)将不会在Webpack中传递:

webpack.config.js