UNPKG

3.23 kBJavaScriptView Raw
1const path = require("path");
2const ModuleScopePlugin = require("react-dev-utils/ModuleScopePlugin");
3const { styles } = require("./constants");
4// 1.0.1
5/**
6 * @options
7 * root: optional 项目的根目录 默认为当前文件所有路径的上上级,最好还是传进来
8 * entry: Required Webpack入口模块
9 * dllList: optional dll列表 默认为空数组
10 * hostPage: optional 本地承载页,需要是一个绝对路径, 默认的挂载点为#bsMain
11 * browsers: optional 浏览器支持 默认为 > 1% 详情请看 https://github.com/ai/browserslist,
12 * moduleDirectories: optional 数组 模块查找目录,默认为 node_modules,
13 * resoveAlias: 使用Alias来方便一些模块的引入
14 * alias
15 * transformInclude:
16 * transofrmExclude:
17 * port
18 * host
19 * engines: ['react'] default
20 * moduleScope: 默认为'.', 可以通过moduleScope来指明另外的目录,如果想使用根目录,请设置 ".", 如果设置了此scope,所有的相对模板只能从此目录下导入。
21 */
22module.exports = (options = {}) => {
23 // const ASSET_PATH = process.env.asset_path || "";
24 //使用全部变量保存配置项,给loaders和plugins使用
25 // const checkDeps = require("./helpers/checkdeps")(options.styles || styles);
26 // if (checkDeps) process.exit(1);
27 const { globalObjectKey, appRoot, typeFunc } = require("./constants.js");
28
29 let {
30 port,
31 host,
32 friendly,
33 moduleScope,
34 buildProd,
35 mode
36 } = (global[globalObjectKey] = o = require("./helpers/parse-config")(
37 options
38 ));
39
40 let { applyPlugins, applyRules } = options;
41
42 let plugins = require("./plugins");
43 let rules = require("./rules");
44
45 if (typeof applyPlugins === typeFunc) {
46 plugins = applyPlugins(plugins);
47 }
48
49 if (typeof applyRules === typeFunc) {
50 rules = applyRules(rules);
51 }
52 return {
53 mode,
54 context: appRoot,
55 entry: o.entry,
56 output: require('./helpers/output-name')(options.output),
57 //webpack 4的优化配置,
58 optimization: require("./helpers/optimization")(),
59 module: {
60 // 如果忘了export,就报错,而不是只级警告
61 strictExportPresence: true,
62 rules
63 },
64 plugins,
65 resolve: {
66 extensions: require("./helpers/get-resolve-extensions"),
67 // modules: ["node_modules"],
68 alias: o.alias,
69 plugins: [new ModuleScopePlugin(moduleScope)]
70 },
71 externals: options.externals,
72 devServer: Object.assign(
73 {
74 port: port,
75 host: host,
76 hot: true,
77 contentBase: path.resolve(appRoot, "dist/"),
78 publicPath: "/",
79 headers: { "Access-Control-Allow-Origin": "*" },
80 quiet: friendly
81 },
82 options.devServer
83 ),
84 target: "web",
85 node: {
86 setImmediate: false,
87 dgram: "empty",
88 fs: "empty",
89 net: "empty",
90 tls: "empty",
91 child_process: "empty"
92 },
93 devtool: buildProd ? "cheap-source-map" : false
94 };
95};