我正在從RequireJS項目遷移到Webpack。 後者對我來說是新的,我將其用作學習練習。 在RequireJS我可以這樣註冊的東西:Webpack 2:爲jQWidgets提供像RequireJS一樣的勻場?
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"]
}
}
,然後只需要「jqxsplitter」比如,像這樣:
import "jqxsplitter"
之類的東西將被正確註冊和加載。 現在我正在看幾個指南/教程/我發現從RequireJS遷移到Webpack時發現的,例如this one和this之一。 所以以下這些見解,我想在我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"
};
相關部分(我認爲)是
module: {
loaders: [{
test: /jqxcore/,
loader: "imports?jquery!exports?$"
}, {
test: /jqxsplitter/,
loader: "imports?jquery,jqxcore!exports?$"
}]
},
這是很清楚如何的「語法進口/出口「應該等於RequireJS的」deps「和」exports「。 不過我做這在我的index.ts文件(應用程序根)時:
import "jqwidgets-framework/jqwidgets/jqxsplitter";
我得到運行我的應用程序時,「jqxBaseFramework是未定義」的錯誤。 我在jQWidgets的論壇上發現了對這個錯誤的引用,但是沒有一個答案似乎真的解決了這個問題,或者包含了AOT編譯之類的東西,它不適用於我的情況,因爲我沒有使用Angular。
我已經posted同樣的問題在jQWidges論壇,但至今沒有實際的答案(現在要在兩週),只有一個通用的答案說jqxwhateverplugin.js之前,我應該加載jqxcore.js。 嗯,顯然,這就是我正在嘗試使用勻場完成的。
任何想法?