J'ai besoin de Webpack tout le fichier js dans le dossier de script.J'ai essayé
module.exports = {
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loaders: ["babel-loader"],
}
],
},
entry: "./src/scripts/*.js",
output: {
path: './src/build',
filename: '[name].js'
}
};
Je reçois une erreur comme celle-ci,
ERROR in Entry module not found: Error: Cannot resolve 'file' or 'directory' ./s
rc/scripts/* in E:\Web project\ReactJS\react-tutorial
resolve file
E:\Web project\ReactJS\react-tutorial\src\scripts\* doesn't exist
E:\Web project\ReactJS\react-tutorial\src\scripts\*.webpack.js doesn't exist
E:\Web project\ReactJS\react-tutorial\src\scripts\*.web.js doesn't exist
E:\Web project\ReactJS\react-tutorial\src\scripts\*.js doesn't exist
E:\Web project\ReactJS\react-tutorial\src\scripts\*.json doesn't exist
resolve directory
E:\Web project\ReactJS\react-tutorial\src\scripts\* doesn't exist (directory d
efault file)
E:\Web project\ReactJS\react-tutorial\src\scripts\*\package.json doesn't exist
(directory description file)
Il ne cherche pas tout le fichier js mais il recherche * .js comme celui-ci. Aidez-moi à comprendre ce que j'ai oublié
La valeur entry
doit être résolue en un fichier spécifique ou en une liste de fichiers spécifiques.
Depuis le webpack docs :
Si vous passez une chaîne: La chaîne est résolue en un module chargé au démarrage.
Si vous passez un tableau: Tous les modules sont chargés au démarrage. Le dernier est exporté.
Si vous essayez simplement de définir un module, modifiez votre valeur entry
pour qu'elle pointe vers votre fichier d'application principal, puis utilisez-en d'autres modules.
Si vous voulez vraiment regrouper tous les fichiers d'un répertoire, voir arseniews answer
Avoir un ou plusieurs points d'entrée devrait suffire dans la plupart des cas d'utilisation, mais si vous voulez vraiment vouloir regrouper tous les fichiers du répertoire, vous pouvez utiliser ce qui suit:
Comme expliqué ici: https://github.com/webpack/webpack/issues/37
var glob = require("glob");
// ...
entry: glob.sync("./src/scripts/*.js")
Webpack attend une liste de fichiers pour la configuration entry
, pas un motif global .
Vous devrez lister les fichiers manuellement ou automatiquement avec cet extrait de code
var fs = require('fs'),
entries = fs.readdirSync('./src/scripts/').filter(function(file) {
return file.match(/.*\.js$/);
});
puis passez-le à la configuration de webpack.
J'ai eu quelques problèmes avec les chemins de fichiers dans Webpack 2.4.1, donc fait ceci. Outre plusieurs entrées, cela crée également plusieurs fichiers .html.
const HtmlWebpackPlugin = require('html-webpack-plugin');
const fs = require('fs');
function getEntries (){
return fs.readdirSync('./src/pages/')
.filter(
(file) => file.match(/.*\.js$/)
)
.map((file) => {
return {
name: file.substring(0, file.length - 3),
path: './pages/' + file
}
}).reduce((memo, file) => {
memo[file.name] = file.path
return memo;
}, {})
}
const config = {
entry: getEntries,
output: {
path: resolve('./public'),
filename: '[name].js'
},
plugins: [
new HtmlWebpackPlugin({
title: 'My App',
filename: '[name].html',
template: './pages/_template.html'
})
]
}
Juste en utilisant glob.sync
donnera des noms de fichiers séquentiels, tels que 0.[hash].js
et 1.[hash].js
, parce que entry
attend un objet avec le nom du fichier dans la clé et son emplacement dans la valeur, mais glob.sync
renvoie un tableau.
La méthode suivante présente l'avantage de produire un objet avec des clés et des valeurs basées sur les noms de fichiers. Vous pouvez également ajouter des entrées supplémentaires, telles que vendor
et common
. Nécessite lodash.
const glob = require("glob");
const _ = require('lodash');
module.exports = {
entry: Object.assign({},
_.reduce(glob.sync("./src/*.js"),
(obj, val) => {
const filenameRegex = /([\w\d_-]*)\.?[^\\\/]*$/i;
obj[val.match(filenameRegex)[1]] = val;
return obj;
},
{}),
{
vendor: [
'lodash'
]
}
),
output: {
filename: '[name].[chunkhash].bundle.js',
path: path.resolve(__dirname, 'dist')
}
}
Ce dernier produira l'objet suivant et le passera à entry
, à condition que nous ayons index.js
et app.js
dans le ./src
répertoire:
{
index: './src/index.js',
app: './src/app.js',
vendor: [ 'lodash' ]
}