如何确定已安装的webpack版本

dob*_*ler 59 javascript node.js webpack webpack-2 webpack-3

特别是在从webpack v1过渡到v2期间,以编程方式确定安装了哪个webpack版本非常重要,但我似乎找不到合适的API.

Ric*_*cky 102

版本已安装:

使用webpack CLI:(--version, -v Show version number [boolean])

webpack --version
Run Code Online (Sandbox Code Playgroud)

要么:

webpack -v
Run Code Online (Sandbox Code Playgroud)

使用npm list命令:

npm list webpack
Run Code Online (Sandbox Code Playgroud)

结果name@version-range:

<projectName>@<projectVersion> /path/to/project
??? webpack@<version-range>
Run Code Online (Sandbox Code Playgroud)

使用纱线列表命令:

yarn list webpack
Run Code Online (Sandbox Code Playgroud)

如何以编程方式执行?

Webpack 2引入了配置类型.

您可以返回一个接受环境作为参数的函数,而不是导出配置对象.运行webpack时,您可以通过--env诸如--env.production 或指定构建环境密钥--env.platform=web.

我们将使用一个名为的构建环境密钥--env.version.

webpack --env.version $(webpack --version)
Run Code Online (Sandbox Code Playgroud)

要么:

webpack --env.version $(webpack -v)
Run Code Online (Sandbox Code Playgroud)

为此,我们需要做两件事:

更改我们的webpack.config.js文件并使用DefinePlugin.

DefinePlugin允许您创建可在编译时配置的全局常量.

-module.exports = {
+module.exports = function(env) {
+  return {
    plugins: [
      new webpack.DefinePlugin({
+        WEBPACK_VERSION: JSON.stringify(env.version) //<version-range>
      })
    ]
+  };
};
Run Code Online (Sandbox Code Playgroud)

现在我们可以像这样访问全局常量:

console.log(WEBPACK_VERSION);
Run Code Online (Sandbox Code Playgroud)

最新版本:

使用npm view命令将返回注册表中可用的最新版本:

npm view [<@scope>/]<name>[@<version>] [<field>[.<subfield>]...]


对于webpack使用:

npm view webpack version
Run Code Online (Sandbox Code Playgroud)

  • 所以webpack没有返回其版本的API,我必须使用shell命令吗? (2认同)

gat*_*tes 15

对于那些正在使用的人 yarn

yarn list webpack 会做的

$ yarn list webpack
yarn list v0.27.5
?? webpack@2.6.1
Done in 1.24s.
Run Code Online (Sandbox Code Playgroud)


Isa*_*Pak 10

只是还没有提到的另一种方式:

如果您在本地将其安装到项目中,请打开 node_modules 文件夹并检查您的 webpack 模块。

$cd /node_modules/webpack/package.json

打开 package.json 文件并查看 version

在此处输入图片说明


tre*_*bor 6

如果使用 Angular CLI v7+,webpack 版本会打印在以下输出中ng version

-> ng version

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / ? \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/


Angular CLI: 7.0.6
Node: 11.0.0
OS: darwin x64
Angular: 7.1.0
... animations, cdk, common, compiler, compiler-cli, core, forms
... http, language-service, material, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.10.6
@angular-devkit/build-angular     0.10.6
@angular-devkit/build-optimizer   0.10.6
@angular-devkit/build-webpack     0.10.6
@angular-devkit/core              7.0.6
@angular-devkit/schematics        7.0.6
@angular/cli                      7.0.6
@ngtools/webpack                  7.0.6
@schematics/angular               7.0.6
@schematics/update                0.10.6
rxjs                              6.3.3
typescript                        3.1.6
webpack                           4.19.1
Run Code Online (Sandbox Code Playgroud)

  • 在 Angular 10 中,Webpack 未与“ng version”一起列出。如果您将自定义 webpack 配置与“@angular-builders/custom-webpack”一起使用,请尝试“npm list webpack”,它向我显示了 webpack 的使用版本。 (3认同)

dob*_*ler 5

webpack 4现在提供了可以使用的version属性!

  • 这意味着,无论您在哪里提供了“webpack”变量(例如在安装/配置文件中),您都可以调用“webpack.version”,然后您将得到“xyz”形式的版本字符串。 (3认同)

Ahm*_*mal 5

在命令行界面中

$ webpack --version
    
webpack-cli 4.1.0
    
webpack 5.3.2
Run Code Online (Sandbox Code Playgroud)

在代码中(节点运行时)

process.env.npm_package_devDependencies_webpack // ^5.3.2
Run Code Online (Sandbox Code Playgroud)

或者

process.env.npm_package_dependencies_webpack // ^5.3.2
Run Code Online (Sandbox Code Playgroud)

在插件中

compiler.webpack.version // 5.3.2
Run Code Online (Sandbox Code Playgroud)