使用 webpack 的 Proxyquire 无法编译
Posted
技术标签:
【中文标题】使用 webpack 的 Proxyquire 无法编译【英文标题】:Proxyquire with webpack don't compile 【发布时间】:2017-09-05 09:20:47 【问题描述】:我已经安装了 proxyquire,我的 ajax.test.tsx 文件包含以下代码,只有 2 行
import * as proxyquire from 'proxyquire';
proxyquire.noCallThru();
我的 webpack 代码如下
module.exports =
entry:
"book.service": './src/book.service.ts',
"ajax.test": './src/ajax.test.tsx'
,
output:
filename: "[name].js",
path: __dirname + "/dist"
,
devtool: "source-map",
watch: true,
resolve:
extensions: [".tsx", ".tsx", ".js", ".json", ".ts", '.d.ts']
,
module:
rules: [
test: /\.tsx?$/, loader: "awesome-typescript-loader" ,
enforce: "pre", test: /\.js$/, loader: "source-map-loader"
]
,
externals:
'react/lib/ExecutionEnvironment': true,
'react/addons': true,
'react/lib/ReactContext': 'window'
;
我已经安装了 proxyquire 和 @types/proxyquire。当我运行 webpack 命令时,它会抛出以下错误
WARNING in ./~/proxyquire/lib/proxyquire.js
require.extensions is not supported by webpack. Use a loader instead.
@ ./~/proxyquire/index.js 3:17-44
@ ./src/ajax.test.tsx
ERROR in ./~/proxyquire/lib/proxyquire.js
Module not found: Error: Can't resolve 'module' in '***\node_modules\pr
oxyquire\lib'
【问题讨论】:
【参考方案1】:proxyquire 与 webpack 不兼容 - https://github.com/thlorenz/proxyquire/issues/62
问题
Proxyquire 使用 webpack 不支持的 require.extensions。
替代品
inject loader
babel-plugin-rewire
【讨论】:
【参考方案2】:Proxyquire 是为“node.js 模块系统”构建的,而不是 webpack 的。 你必须使用与“前端”兼容的东西——inject-loader 或 webpack-rewire。
如果您不尊重 *-loaders 的简单性 - 您可以尝试 rewiremock。它具有类似 proxyquire 的语法,可以在 node.js 和 webpack 环境中工作。
【讨论】:
【参考方案3】:在您的 webpack.config.js 中更改以下行:
test: /\.tsx?$/, loader: "awesome-typescript-loader"
到:
test: /\.tsx?$/, loader: "awesome-typescript-loader", exclude: /node_modules/
这应该可以解决您的问题。
【讨论】:
以上是关于使用 webpack 的 Proxyquire 无法编译的主要内容,如果未能解决你的问题,请参考以下文章
nodeJS proxyquire 覆盖 require 的特定功能
TypeError:AWS.SecretsManager 不是使用 proxyquire 进行单元测试的构造函数