Ich migriere von einem RequireJS-Projekt zu Webpack. Letzteres ist neu für mich, ich benutze dies als eine Lernübung. In RequireJS konnte ich Sachen wie diese registrieren:Webpack 2: Shimming wie RequireJS für jQWidgets?
shim: {
'jqxcore': {
exports: "$",
deps: ["jquery"]
},
'jqxtree': {
exports: "$",
deps: ["jquery", "jqxcore"]
},
'jqxbutton': {
exports: "$",
deps: ["jquery", "jqxcore"]
},
'jqxsplitter': {
exports: "$",
deps: ["jquery", "jqxcore"]
},
'jqxmenu': {
exports: "$",
deps: ["jquery", "jqxcore"]
}
}
und dann benötigen nur „jqxsplitter“ zum Beispiel wie folgt:
import "jqxsplitter"
und Sachen richtig registriert werden würde und geladen. Jetzt habe ich ein paar Guides/Tutorials/Takes gesehen, die ich bei der Migration von RequireJS zu Webpack gefunden habe, wie this eins und this eins. So folgt diese Einsichten Ich versuche, so etwas wie dies in meinem webpack.config.js:
"use strict";
// Required to form a complete output path
const path = require("path");
// Plagin for cleaning up the output folder (bundle) before creating a new one
const CleanWebpackPlugin = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const webpack = require("webpack");
// Path to the output folder
const bundleFolder = "./wwwroot/";
// Path to the app source code
const appFolder = "./app/";
module.exports = {
// Application entry point
entry: {
main: appFolder + "index.ts",
vendor: [
"knockout",
"jquery",
"jqxcore"
],
jqxsplitter: "jqxsplitter"
},
// Output file
output: {
filename: "[name].js",
chunkFilename: "[name].js",
path: path.resolve(bundleFolder)
},
module: {
rules: [{
test: /\.tsx?$/,
loader: "ts-loader",
exclude: /node_modules/
}, {
test: /\.html?$/,
loader: "html-loader" //TODO: file-loader?
}],
loaders: [{
test: /jqxcore/,
loader: "imports?jquery!exports?$"
}, {
test: /jqxsplitter/,
loader: "imports?jquery,jqxcore!exports?$"
}]
},
resolve: {
extensions: [".tsx", ".ts", ".js"],
alias: {
"jqxcore": "jqwidgets-framework/jqwidgets/jqxcore",
"jqxsplitter": "jqwidgets-framework/jqwidgets/jqxsplitter"
}
},
plugins: [
new CleanWebpackPlugin([bundleFolder]),
new HtmlWebpackPlugin({
filename: "index.html",
template: appFolder + "index.html",
chunks: ["main", "vendor"]
}),
new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
filename: "vendors.js",
minChunks: Infinity
})
],
devtool: "source-map"
};
den relevanten Teil (ich nehme an) sein
module: {
loaders: [{
test: /jqxcore/,
loader: "imports?jquery!exports?$"
}, {
test: /jqxsplitter/,
loader: "imports?jquery,jqxcore!exports?$"
}]
},
Es ist ziemlich klar, wie die Syntax von „ Importe/Exporte "soll den" Deps "und" Exporten "von RequireJS entsprechen. Allerdings, wenn ich dies in meiner index.ts Datei (app root):
import "jqwidgets-framework/jqwidgets/jqxsplitter";
Ich erhalte die Fehlermeldung „jqxBaseFramework nicht definiert ist“, wenn meine Anwendung ausgeführt wird. Ich habe Verweise auf diesen Fehler in den Foren von jQWidgets gefunden, aber keine der Antworten scheint das Problem wirklich anzugehen oder Dinge wie die AOT-Kompilation einzubeziehen, was nicht auf meine Situation zutrifft, weil ich Angular nicht verwende.
Ich habe posted diese gleiche Frage auf den jQWidges Foren, aber bis jetzt keine tatsächliche Antwort (läuft jetzt zwei Wochen), nur eine einzige generische Antwort sagen, ich sollte jqxcore.js vor jqxwhateverplugin.js laden. Nun ja, das ist es, was ich mit dem Shimming erreichen will.
Irgendwelche Ideen?