what online docs cli node.js webpack

node.js - online - Cómo agregar la asignación de comodines en la entrada del paquete web



webpack-- w (5)

Necesito empacar todo el archivo js en la carpeta de scripts. Intenté esto

module.exports = { module: { loaders: [ { test: //.js$/, exclude: /node_modules/, loaders: ["babel-loader"], } ], }, entry: "./src/scripts/*.js", output: { path: ''./src/build'', filename: ''[name].js'' } };

Recibo un error como este,

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)

No está buscando todo el archivo js sino que está buscando * .js así. Ayúdame a descubrir lo que me perdí


El glob.sync uso de glob.sync dará como resultado nombres de archivos secuenciales, como 0.[hash].js y 1.[hash].js , porque la entry espera un objeto con el nombre del archivo en la clave y su ubicación en el valor , pero glob.sync devuelve una matriz.

El siguiente método tiene la ventaja de producir un objeto con claves y valores basados ​​en los nombres de los archivos, también puede agregar entradas adicionales, como vendor y common . Requiere 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'') } }

Este último producirá el siguiente objeto y lo pasará a la entry , siempre que tengamos index.js y app.js en el directorio ./src :

{ index: ''./src/index.js'', app: ''./src/app.js'', vendor: [ ''lodash'' ] }


El valor de entry debe resolverse en un archivo específico, o una lista de archivos específicos.

De los documentos de la carpeta web :

Si pasa una cadena: La cadena se resuelve en un módulo que se carga al inicio.

Si pasa una matriz: todos los módulos se cargan al inicio. El último es exportado.

Si simplemente está tratando de definir un módulo, edite el valor de entry para que apunte al archivo principal de la aplicación y luego solicite otros módulos.

Si realmente desea agrupar todos los archivos de un directorio, consulte la respuesta de arseniews


Tener uno o pocos puntos de entrada debería ser suficiente para la mayoría de los casos de uso, pero si realmente desea agrupar todos los archivos del directorio, puede usar lo siguiente:

Como se explica aquí: https://github.com/webpack/webpack/issues/370

var glob = require("glob"); // ... entry: glob.sync("./src/scripts/*.js")


Tuve algunos problemas con las rutas de archivos en Webpack 2.4.1, así que hice esto. Además de las entradas múltiples, esto también crea múltiples archivos .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'' }) ] }


Webpack espera una lista de archivos para la configuración de entry , no un patrón global .

Deberá enumerar los archivos de forma manual o automática con este fragmento de código

var fs = require(''fs''), entries = fs.readdirSync(''./src/scripts/'').filter(function(file) { return file.match(/.*/.js$/); });

y luego pasarlo a la configuración del paquete web.