2017-08-25 1 views
1

Ich habe versucht, automatisierte Tests für mein Repository mit mocha-webpack und Travis CI einzurichten. Meine Tests laufen zwar gut auf meinem lokalen Computer, konnten aber noch nicht mit Travis CI abgeschlossen werden. Ich habe nicht in der Lage gewesen, diesen letzten Fehler herauszufinden:Travis CI, Mokkatext, Webpack Kompilierungsfehler: Modul nicht gefunden: 'jQuery'

WEBPACK Failed to compile with 1 error(s) 
Error in ./src/ts/myfile.ts 
Module not found: 'jQuery' in '/home/travis/build/myname/myrepo/src/ts' 

Basierend aus der Fehlermeldung, es sieht aus wie webpack versucht, die jQuery-Modul zu lösen (ich den Imports unter der Annahme durch meinen webpack hinzugefügt werden .ProvidePlugin-Aufruf, da es keine jquery-Importe in myfile.ts gibt) in meine Dateien, anstatt nach node_modules zu suchen.

Testskript

mocha-webpack --webpack-config webpack.config.js --require jsdom-global/register 

Abhängigkeiten

"jquery": "^3.2.1" 

dev Abhängigkeiten

"@types/chai": "^4.0.4" 
"@types/jquery": "3.2.0" 
"@types/mocha": "^2.2.42" 
"chai": "^4.1.1" 
"css-loader": "^0.28.5" 
"jsdom": "^11.2.0", 
"jsdom-global": "^3.0.2" 
"mocha": "^3.5.0" 
"mocha-typescript": "^1.1.7" 
"mocha-webpack": "^1.0.0-rc.1" 
"sass-loader": "^6.0.6" 
"ts-loader": "^2.3.3" 
"typescript": "^2.4.2" 
"webpack": "^3.5.5" 

webpack.config.js

const webpack = require("webpack"); 
module.exports = { 
    target: "node", 
    externals: ["jquery", "moment"], 
    resolve: { 
    extensions: [".ts", ".js"] 
    }, 
    module: { 
    loaders: [ 
     { test: /\.ts$/, loader: "ts-loader" }, 
     { test: /\.scss$/, loaders: ['css-loader/locals?modules', 'sass-loader'] }  
    ] 
    }, 
    plugins: [ 
    new webpack.ProvidePlugin({ 
     $: "jQuery", 
     jQuery: "jQuery" 
    }) 
    ] 
} 

travis

language: node_js 
node_js: 
    - "node" 

cache: 
    directories: 
    - "node_modules" 

tsconfig.json

{ 
    "compilerOptions": { 
     "module": "commonjs", 
     "noImplicitAny": true, 
     "removeComments": true, 
     "sourceMap": true, 
     "target": "es5", 
     "lib": ["es2016", "dom"], 
     "typeRoots": [ 
      "node_modules/@types" 
     ], 
     "experimentalDecorators": true // For the decorators in Mocha tests. 
    }, 
    "compileOnSave": true, 
    "include": [ 
     "src/**/*", 
     "test/*" 
    ] 
} 

Antwort

1

ich es dachte, durch einige Experimente aus.

Mein webpack.config.js hatte jquery als externes definiert:

externals: ["jquery", "moment"] 

Dies ist das Modul aus der Umgebung entfernt werden, verursacht. Allerdings war ich scheinbar in der Lage, um es auf meiner lokalen Box durch die ProvidePlugin zu laufen zu bekommen:

new webpack.ProvidePlugin({ 
    $: "jQuery", 
    jQuery: "jQuery" 
}) 

Hinweis des Groß Q in jQuery. Für meine lokale Umgebung wurde jQuery (das nicht entfernt wurde, da es nicht in der externen Zeile definiert war) als jquery-Modul definiert, aber auf travis-ci war es nirgendwo zu finden. Ich bin mir immer noch nicht sicher, warum "jQuery" überhaupt für mich funktioniert hat.

Durch die Externe Linie von der Konfiguration zu entfernen, und das Ändern der jQuery all Klein zu sein, es behob mein Problem:

new webpack.ProvidePlugin({ 
    $: "jquery", 
    jQuery: "jquery" 
})