Alles scheint gut zu bauen: http://d.pr/i/1aZxR Mit den folgenden configs.
Beim Ausführen des Codes erhalte ich jedoch folgende Fehlermeldung (über den Webpack-Dev-Server):
Uncaught TypeError: __webpack_require__(...) is not a function(anonymous function) @ login.js:4__webpack_require__ @ bootstrap 38790ff45722f55eb700?6a08:50(anonymous function) @ bootstrap.js:2363__webpack_require__ @ bootstrap 38790ff45722f55eb700?6a08:50(anonymous function) @ app.38790ff45722f55eb700.js:29__webpack_require__ @ bootstrap 38790ff45722f55eb700?6a08:50webpackJsonpCallback @ bootstrap 38790ff45722f55eb700?6a08:21(anonymous function) @ app.38790ff45722f55eb700.js:1
angular.js:68 Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to:
Error: [$injector:nomod] Module 'app' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
http://errors.angularjs.org/1.4.7/$injector/nomod?p0=app
at http://localhost:3000/vendor.js:193:13
at http://localhost:3000/vendor.js:2111:18
at ensure (http://localhost:3000/vendor.js:2035:39)
at module (http://localhost:3000/vendor.js:2109:15)
at http://localhost:3000/vendor.js:4515:23
at forEach (http://localhost:3000/vendor.js:461:21)
at loadModules (http://localhost:3000/vendor.js:4499:6)
at createInjector (http://localhost:3000/vendor.js:4424:12)
at doBootstrap (http://localhost:3000/vendor.js:1782:21)
at bootstrap (http://localhost:3000/vendor.js:1803:13)
http://errors.angularjs.org/1.4.7/$injector/modulerr?p0=app&p1=Error%3A%20%…%20at%20bootstrap%20(http%3A%2F%2Flocalhost%3A3000%2Fvendor.js%3A1803%3A13)(anonymous function) @ angular.js:68(anonymous function) @ angular.js:4413forEach @ angular.js:336loadModules @ angular.js:4374createInjector @ angular.js:4299doBootstrap @ angular.js:1657bootstrap @ angular.js:1678angularInit @ angular.js:1572(anonymous function) @ angular.js:28899fire @ jquery.js:3099self.fireWith @ jquery.js:3211jQuery.extend.ready @ jquery.js:3417completed @ jquery.js:3433
Ich denke, dass Babel irgendwie mit __webpack_require__
interferiert, aber ich bin mir nicht sicher. Ich habe es mit verschiedenen Transformationen/Plugins versucht, konnte aber keine Lösung finden.
.babelrc:
{
"plugins":[
"transform-runtime",
"transform-node-env-inline"
],
"presets":[
"stage-0",
"es2015"
]
}
hier ist meine webpack.config.js:
var Clean = require('clean-webpack-plugin');
var CompressionPlugin = require("compression-webpack-plugin");
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var HtmlWebpackPlugin = require('html-webpack-plugin');
var fs = require('fs');
var ngAnnotatePlugin = require('ng-annotate-webpack-plugin');
var path = require('path');
var StatsPlugin = require('stats-webpack-plugin');
var webpack = require('webpack');
//CONSTANTS
var NODE_ENV = process.env.NODE_ENV;
var IS_DEV = NODE_ENV === 'development';
var babelFile = fs.readFileSync('./.babelrc', 'utf8');
var BABELRC = JSON.parse(babelFile);
var cleanFonts = function(){
return new Clean(['dist/tmp/*.{ttf,eot,svg,woff}']);
}
var cleanImages = function(){
return new Clean(['dist/tmp/*.{png,jpg}']);
}
var cleanJs = function(){
return new Clean(['dist/*.{js,map}']);
}
var plugins = [
new webpack.NoErrorsPlugin(),
cleanJs(),
// new StatsPlugin('stats.json', {chunkModules: true}),
new webpack.ProvidePlugin({$: "jquery",jQuery: "jquery","window.jQuery": "jquery" }),
new webpack.IgnorePlugin(/^\.\/locale$/, [/moment$/]),
new HtmlWebpackPlugin({
template: 'client/app/vendors/assets/index-tmpl.html',
filename: 'index.html'
}),
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'vendor.js',
chunks:['customer','personalOrganization','app']
})
// new ngAnnotatePlugin({add: true})
// new ExtractTextPlugin("style.[hash].css", {
// disable: false,
// allChunks: true
// }),
//new webpack.optimize.CommonsChunkPlugin({minChunks: 2, children: true, async: true}),
// new CompressionPlugin({asset: "{file}.gz", algorithm: "gzip", regExp: /\.js$|\.html$/, threshold: 10240, minRatio: 0.8 })
];
var dev_plugins = [
]
var prod_plugins = [
cleanFonts(),
cleanImages(),
new webpack.optimize.UglifyJsPlugin({
minimize: true,
sourceMap: false,
compress: { warnings: false },
mangle: false
}),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.AggressiveMergingPlugin()
];
if(NODE_ENV !== 'development'){
plugins = plugins.concat(prod_plugins);
}
else{
plugins = plugins.concat(dev_plugins);
}
babelLoaderOpts = {
cacheDirectory: true
};
Object.assign(babelLoaderOpts, BABELRC);
module.exports = {
cache: IS_DEV,
// watch: IS_DEV,
devtool: 'source-map',
entry: {
"app": "./client/app/app.js",
"devserver": 'webpack-dev-server/client?http://localhost:3000'
},
output: {
path: __dirname + "/dist",
filename: '[name].[hash].js'
},
module: {
noParse: [
/moment.js/
],
loaders: [
{ test: require.resolve("jquery"), loader: "expose?$!expose?jQuery" },
{
test: /\.js$/,
exclude: /(node_modules|bower_components|vendors)/,
loader: 'babel',
query: babelLoaderOpts
},
{ test: /\.html$/, loader: 'raw' },
{ test: /\.scss$/, loader: "style!css!sass?outputStyle=expanded"+"&includePaths[]=" + path.resolve(__dirname, "./node_modules/compass-mixins/lib")},
{ test: /\.css$/, loader: 'style!css' },
{ test: /\.(png|jpeg|jpg|gif)$/, loader: 'url-loader?limit=30000&name=tmp/[name].[ext]&no_emit_env=development'},
{ test: /\.woff(\?\S*)?$/, loader : 'url?prefix=font/&limit=10000&mimetype=application/font-woff&name=tmp/[name].[ext]&no_emit_env=development'},
{ test: /\.woff2/, loader: 'url?prefix=font/&limit=100000&mimetype=application/font-woff2&name=tmp/[name].[ext]&no_emit_env=development' },
{ test: /\.ttf/, loader : 'file?prefix=font/&name=tmp/[name].[ext]&no_emit_env=development'},
{ test: /\.eot/, loader : 'file?prefix=font/&name=tmp/[name].[ext]&no_emit_env=development'},
{ test: /\.svg/,loader : 'file?prefix=font/&name=tmp/[name].[ext]&no_emit_env=development'},
//{ test: /\.scss$/, loader: ExtractTextPlugin.extract('style', 'css?modules&importLoaders=2&sourceMap!sass?outputStyle=expanded&sourceMap=true&sourceMapContents=true&&includePaths[]='+ path.resolve(__dirname, './node_modules/compass-mixins/lib')) },
//{ test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") }
]
},
devServer: {
contentBase: './client/app'
},
resolve: {
modulesDirectories: ['vendors','node_modules', 'bower_components'],
extensions: ['', '.js', '.json']
},
plugins: plugins
};
Ich möchte einen weiteren Grund hinzufügen, warum dieser Fehler auftauchen könnte:
Ich habe folgendes gemacht:
import mapActions from 'vuex'
anstatt:
import { mapActions } from 'vuex'
Ersteres importierte den gesamten vuex
-Export, bei dem es sich um ein Objekt handelt. Das Hinzufügen von Objekt-Destructuring behebte das Problem.
Ich hatte den gleichen Fehler. Im Umgang mit es6-Modulen sollten Sie requir (...) verwenden. Default
Zum Beispiel:
const angular = require('angular');
const ngModule = angular.module('app', []);
require('./directives').default(ngModule);
// or
var kgdir = require('./directives').default;
kgdir(ngModule);
babel-plugin-add-module-exports sollte jedoch ebenfalls funktionieren.
Sie können diese Seite besuchen: github webpack issue 1685
Ich hatte ein ähnliches Problem nach dem Update auf Babel 6 in meiner Webpack-Dev-Server-Eingabedatei. Wie von @Serhey in den Kommentaren erwähnt, habe ich mein Problem behoben, indem ich von "erforderlich" zu "importieren" gewechselt habe, d. H. require('./devTools)(store);
zu import devTools from './devTools'; devTools(store);
.
Ich bin der Meinung, dass die vorgeschlagenen Lösungen, von denen Sie wechseln müssen, nicht importiert werden müssen. Importe müssen oben in der Datei durchgeführt werden. Aus diesem Grund können Sie nicht die devtools für Ihren Produktionsaufbau auslassen. Sie möchten eine bedingte Anforderung.
Ich denke, babel-plugin-add-module-exports löst das Problem. Werfen Sie einen Blick auf dieses reag-redux-starter-kit , um zu sehen, wie es in einem Projekt verwendet wird.
Ich hatte das gleiche Problem. Die Lösung bestand darin, von den Anweisungen zu wechseln, wie z
let fs = require("fs");
importieren über
import * as fs from 'fs';
Sie können auch alle Node-Module über das externe Array in Ihrer Webpack-Konfiguration verfügbar machen. Da sie über die externen Webpacks bereitgestellt werden, müssen sie nicht benötigt, sondern beim Import verwendet werden.
module.exports = {
"externals": {
"electron": "require('electron')",
"child_process": "require('child_process')",
"fs": "require('fs')",
"path": "require('path')",
...
}
}
Weitere Informationen zu diesem Problem finden Sie in meinem Artikel .
Mein Fall ist nur die Umkehrung der Antwort, die @William oben gegeben hat . Einschließlich {} in import mapActions from 'vuex'
hat mir geholfen .
import { mapActions } from 'vuex'
Ich hatte dieses Problem mit meinem Webpack, da ich mein Projekt für das Web und den Knoten erstellte und isomorphic-unfetch
in der entry
verwendete.
Ich habe es behoben, indem ich isomorphic-unfetch
durch den entsprechenden Abruf ersetzt: unfetch
für web & node-fetch
für nodejs
webpack.config.js
module.exports = [
{
entry: ['unfetch', 'regenerator-runtime/runtime', './lib/app.js'],
...
},
{
entry: ['node-fetch', 'regenerator-runtime/runtime', './lib/app.js'],
target: 'node',
...
},
];
Ich habe ein ähnliches Problem gelöst, indem ich einen fehlenden Loader in meine webpack.config eingefügt habe. Keine Ahnung, warum dies das Problem löst, aber Sie möchten vielleicht sehen, ob auch ein Lader fehlt.
(Nur um klar zu sein - ich habe ursprünglich herausgefunden, dass das Problem mit einem Loader war, als ich die Bibliothek heruntergestuft hat, wodurch das Problem auf eine frühere Version herabgestuft wurde. In Webpack-Fehlermeldungen wurde angegeben, dass ein Json-Loader fehlte. Daher fügte ich meiner Konfiguration Folgendes hinzu: und konnte dann auf die neueste Version zurückgehen:
module:{
loaders : [
{
test: /\.json$/,
loader: "json-loader"
}
]
}
)