我正在尝试将Weback集成到我当前的项目中,并且我遇到了一个自定义加载器的问题,我建立了自定义加载器以在每个模块的文件内容周围创建一个concat横幅和页脚,并注入__filename
值。使用grunt
https://github.com/optimizely/marketing-website/tree/dfoxpowell/jordan-webpack-try/grunt/webpack
grunt server
//or
grunt build --env=production //production build for uglify/dedupe
我们在Jenkins上的临时构建使用grunt staging-deploy --branch=$branch --env=production
我们的生产版本使用Docker容器和运行grunt build --env=production
的deploy.sh脚本。由于某种原因,此构建无法运行加载程序,尽管本地grunt build --env=production
将成功运行加载程序并构建资产。
make-webpack.config.js
中的路径来调试它,以便调试Jenkins上是否存在某种安装问题,但这没有帮助。
我知道如果不访问我们的Jenkins部署环境,这很可能是一个难以回答的问题,但是您可以提供的任何帮助调试的信息都会非常有用。
我在Weback repo here中创建了一个基本上与上述信息相同的问题。
更新 我接受了这个建议Injecting variables into webpack并添加了
resolveLoader: {
modulesDirectories: ['loaders', 'node_modules'],
extensions: ['', '.loader.js', '.js']
}
到我的webpack.config并将我的loaders
目录放在我项目的根目录中。不幸的是,结果仍然是相同的,并且加载器不会在Jenkins上运行。
答案 0 :(得分:1)
以下是我发现此问题的解决方案:
我们的CI版本将我们的项目从Git安装为node_module
到NPM,而不是使用git clone
。因此,CI构建的根目录下有一个node_modules
目录,该项目正在此目录中构建。
node_modules/<project npm package name>/{node_modules,grunt/webpack/...configs}
因此,似乎正在错误的node_modules
目录中查找加载程序,但奇怪的是我使用的其他加载程序,例如babel
和handlebars
来源正确。
当我在loader config
中直接使用加载器路径时var injectFilenamePath = path.join(process.cwd(), 'grunt/webpack/inject-filename-loader');
console.log('LOADER PATH => ', injectFilenamePath);
var loaders = [
{
test: /\.js$/,
exclude: [
/node_modules/,
/bower_components/,
/libraries/
],
loader: injectFilenamePath + '?' + opts.injectFileNameParams
},
{ test: /\.hbs$/, loader: 'handlebars-loader' },
{test: /\.js?$/, exclude: ['bower_components', 'node_modules'], loader: 'babel-loader'}
];
控制台输出
LOADER PATH => /opt/tmp/node_modules/marketing-website/grunt/webpack/inject-filename-loader
并且克隆了我们的回购而不是npm i
路径
LOADER PATH => /opt/tmp/marketing-website/grunt/webpack/inject-filename-loader
不确定这是否会以某种方式预期行为,但希望如果它们出现,它会将其他人从类似问题中拯救出来。