Webpack Loader不能使用Jenkins CI Build

时间:2015-04-24 14:57:29

标签: javascript jenkins gruntjs docker webpack

我正在尝试将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将成功运行加载程序并构建资产。

我试图将加载程序硬编码到repo中,然后通过make-webpack.config.js中的路径来调试它,以便调试Jenkins上是否存在某种安装问题,但这没有帮助。

https://github.com/optimizely/marketing-website/blob/dfoxpowell/jordan-webpack-try/loaders/inject-filename-loader.js

我知道如果不访问我们的Jenkins部署环境,这很可能是一个难以回答的问题,但是您可以提供的任何帮助调试的信息都会非常有用。

我在Weback repo here中创建了一个基本上与上述信息相同的问题。

更新 我接受了这个建议Injecting variables into webpack并添加了

resolveLoader: {
  modulesDirectories: ['loaders', 'node_modules'],
  extensions: ['', '.loader.js', '.js']
}

到我的webpack.config并将我的loaders目录放在我项目的根目录中。不幸的是,结果仍然是相同的,并且加载器不会在Jenkins上运行。

1 个答案:

答案 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目录中查找加载程序,但奇怪的是我使用的其他加载程序,例如babelhandlebars来源正确。

当我在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

不确定这是否会以某种方式预期行为,但希望如果它们出现,它会将其他人从类似问题中拯救出来。