我是 webpack 的新手,我没有找到一种方法将我的供应商库从 node_modules 及其依赖项(订单和主文件 [js,css])加载到单独的包文件中。
我曾经使用 bower_components,但根据这个文档,我搬到了 npm。
例子
我的系统中有角度材料,它取决于角度和他自己的 css 文件(angular-material.css)。
我已经尝试了什么
我使用了webpack.optimize.CommonsChunkPlugin,它确实加载了 venodors js 文件,但是按照我在配置文件中输入的顺序(请参阅下面附加的配置文件),所以如果我在 angular 之前放置 angular 材料,则运行将失败。
我尝试将解析对象配置为从“bower.json”中读取,其中配置了主文件描述和依赖项,但效果不佳。
我的配置文件
let webpack = require("webpack");
let path = require("path");
// define preprocessor variables
const envOptions = {
NODE_ENV: "development",
DEBUG: true,
isProduction: false
};
// pass as JSON object into query string ?json=...
const envJson = require('querystring').encode({json:JSON.stringify(envOptions)});
module.exports = {
context: __dirname + "/app",
entry: {
app: "./app.ts",
vendor: [
"jquery",
"angular-animate",
"angular-aria",
"angular-messages",
"angular-resource",
"angular-sanitize",
"angular-ui-router",
"angular-cache",
"angularjs-toaster",
"angular-translate",
"angular-translate-handler-log",
"angular-translate-loader-static-files",
"angular-material",
"angular",
"angular-dynamic-locale",
"ng-file-upload",
"angular-permission",
"moment",
"angular-moment",
"angular-hotkeys",
"angular-scroll",
"jquery.scrollbar",
"lodash",
"ag-grid",
"angular-ui-tree"],
},
output: {
filename: "bundle.js"
},
module: {
loaders: [
{ test: /\.ts/, loader: ['ts-loader?transpileOnly=true', `ifdef-loader?${envJson}`], exclude: [nodeModulesDir], }
]
},
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"window.jQuery" : "jquery",
"moment": "moment",
"agGrid": "ag-grid"
}),
new webpack.optimize.CommonsChunkPlugin(
{ name: 'vendor', filename: 'vendor.bundle.js' , test: 'node_modules/'}
)
],
resolve:{
modules: ['node_modules'],
extensions: ['.ts','.js', '.css', '.scss'],
},
devtool: "#source-map"
};
我想达到什么
Webpack 将生成 2 个包:
- vendor.bundle.js - 包含所有供应商主 js 文件的文件,加载顺序正确。
- app.bundle.js - 一个包含我所有应用程序内部文件的文件。
- vendor.bundle.css - 包含所有供应商主 css 文件的文件
两个供应商捆绑包都应与 bower.json 依赖项中的定义相同。
我的 Webpack 版本是 2.1.0-beta.25