从 requirejs 迁移到 webpack

Migrating from requirejs to webpack

我是 migrating/moving 一个基于 require.js 到 webpack v3 的项目。由于我所有的模块都使用以下语法:

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

其中声明使用哪些模块,并将模块赋值给匿名函数中的变量。自 webpack v2 以来,这似乎已被弃用。我找不到任何关于此的信息(web pack v1 的文档除外)。

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

帮助非常感谢:-) 问候

AMD 在 requirejs 之外从未发现太多用途,因此您可能需要转换。有一些工具可以提供帮助:

有来自 (https://github.com/anodynos/uRequire/wiki/nodejs-Template) 的注意事项:

  • 路径的运行时转换,例如 models/PersonModel 到 ../../models/PersonModel,具体取决于从何处调用。你仍然会得到构建时翻译的 bundleRelative 路径,到他们的 nodejs fileRelative 等价物。

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

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

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

  • 不能 运行 需要 js 加载器插件,例如文本!...或 json!...

你会发现所有这些插件的 webpack 版本

  • 没有 / 的映射,即 webRootMap 等或使用 requirejs.config 的 {baseUrl:"...."} 或 {paths:"lib":"../.. /lib"}

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

复制

CaptEmulation 的回答对较新的 Webpack 版本无效。 Webpack 原生支持 AMD(既不需要额外的加载器,也不需要安装插件)。此处提供了详尽的说明:https://webpack.js.org/api/module-methods.

当有人试图将 RequireJS-based 构建重写为 Webpack 时,这一事实可能很容易被忽视,因为 RequireJS 使用没有尾随 ./ 的相对路径,例如

define('app/dep1', function(dep1) { ... });

在没有额外配置的情况下不会传入Webpack(假设require.config.jswebpack.config.js都在同一个目录):

{
   resolve: {
      modules: [ './', ... ] // other entries possible here
   }
}