我正在尝试在我的项目中使用一个非常新的第三方模块,我使用npm
安装。该模块显然是在具有不区分大小写的文件系统的操作系统上开发的,因此它需要一个文件injectable.js
,而实际的文件名是Injectable.js
。这打破了捆绑过程。
模块的开发人员知道这个问题。同时,我试图弄清楚如何使用模块。我正在使用Webpack捆绑我的项目。
我项目相关部分的树形结构大致如下:
├──config
│ ├──webpack
│ ├──webpack.js
│
├──src
│ ├──client
│ ├──index.js
│
│
├──node_modules
│ ├──the module in question
│ ├── dist
│ │ ├── decorators
│ │ │ ├── providers
│ │ │ ├── Injectable.js
│ │ │
│ │ ├── index.js
|
├──gulpfile.js
index.js
文件夹中的node_modules/the module in question/dist
文件需要来自providers文件夹的文件Injectable.js
,但是使用require('./decorators/providers/injectable');
我想将./decorators/providers/injectable
中的index.js
替换为./decorators/providers/Injectable
。
以下是我在webpack.js文件中所做的事情:
resolve: {
alias: {
'./decorators/providers/injectable': './decorators/providers/Injectable.js',
},
}
但这仍然不起作用;我收到错误Module not found: Error: Cannot resolve 'file' or 'directory' ./decorators/providers/injectable
您能否建议如何在与Webpack捆绑时将节点模块中的一个文件名替换为另一个文件名?
更新:
这是webpack的配置文件:
var path = require('path');
var rucksack = require('rucksack-css')({
fallbacks: true,
autoprefixer: true
});
var precss = require('precss');
var csswring = require('csswring');
var webpack = require('webpack');
module.exports = {
context: path.join(__dirname, '../../'),
debug: false,
entry: [
'./src/client/'
],
output: {
path: path.join(__dirname, '../../public/assets/js'),
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel?stage=1'
},
{
test: /\.css$/,
loader: 'style-loader!css-loader!postcss-loader'
},
{test: /\.png$/, loader: 'file-loader'},
{test: /\.gif$/, loader: 'file-loader'},
{test: /\.jpe?g$/, loader: 'file-loader'},
{test: /\.eot$/, loader: 'file-loader'},
{test: /\.woff2?$/, loader: 'file-loader'},
{test: /\.ttf$/, loader: 'file-loader'},
{test: /\.svg$/, loader: 'file-loader'}
]
},
postcss: function () {
return [rucksack, precss, csswring];
},
plugins: [
new webpack.NormalModuleReplacementPlugin(
/ng-forward\/dist\/decorators\/providers\/injectable\.js/,
require.resolve('ng-forward/dist/decorators/providers/Injectable')
)
],
resolve: {
extensions: ['', '.js']
}
};
答案 0 :(得分:18)
使用webpack.NormalModuleReplacementPlugin
:
plugins: [
new webpack.NormalModuleReplacementPlugin(
/ng-forward\/dist\/decorators\/providers\/injectable\.js/,
require.resolve('ng-forward/dist/decorators/providers/Injectable')
),
],