2017-08-25 4 views
1

J'ai essayé d'obtenir des tests automatisés pour mon référentiel en utilisant mocha-webpack et Travis CI. Mes tests fonctionnent bien sur ma machine locale, mais ils n'ont pas encore été terminés par Travis CI. Je n'ai pas été en mesure de comprendre cette dernière erreur:Travis CI, Moka Test, Webpack Compilation Erreur: Module introuvable: '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' 

Basé hors du message d'erreur, il semble que webpack tente de résoudre le module jQuery (je suppose que l'importation est ajoutée à travers mon webpack Appel .ProvidePlugin, car il n'y a pas d'importations jquery dans monfichier.ts) dans mes fichiers, au lieu de chercher dans node_modules.

script de test

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

dépendances

"jquery": "^3.2.1" 

dépendances dev

"@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/*" 
    ] 
} 

Répondre

1

j'ai tout compris à travers une expérimentation.

Mes webpack.config.js avaient défini jquery comme externe:

externals: ["jquery", "moment"] 

Cela a provoqué le module à retirer de l'environnement. Cependant, je suis apparemment en mesure de le faire fonctionner sur ma boîte locale à travers le ProvidePlugin:

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

Notez le Q majuscule dans jQuery. Pour mon environnement local, jQuery (qui n'était pas supprimé car il n'était pas défini dans la ligne externe) était défini comme le module jquery, mais sur travis-ci, il était introuvable. Je ne sais toujours pas pourquoi "jQuery" a fonctionné pour moi en premier lieu.

En supprimant la ligne externals de la configuration, et en changeant le jQuery pour être en minuscules, il fixe mon problème:

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