1 | const path = require('path')
|
2 | const fs = require('fs')
|
3 | const webpack = require('webpack')
|
4 |
|
5 | process.env.NODE_ENV = 'production'
|
6 |
|
7 | const LINC_DIR = path.resolve(__dirname, '..')
|
8 | const PROJECT_DIR = process.cwd()
|
9 | const MODULES_DIR = path.resolve(PROJECT_DIR, 'node_modules')
|
10 |
|
11 | const packageJson = require(path.resolve(PROJECT_DIR, 'package.json'))
|
12 | const lincConfig = packageJson.linc || {}
|
13 | const src = lincConfig.sourceDir || 'src'
|
14 | const srcDir = path.resolve(PROJECT_DIR, src)
|
15 |
|
16 | const deps = []
|
17 | if (packageJson.dependencies) {
|
18 | deps.concat(Object.keys(packageJson.dependencies))
|
19 | }
|
20 | if (packageJson.devDependencies) {
|
21 | deps.concat(Object.keys(packageJson.devDependencies))
|
22 | }
|
23 |
|
24 | function ensureSlash(path, needsSlash) {
|
25 | var hasSlash = path.endsWith('/')
|
26 | if (hasSlash && !needsSlash) {
|
27 | return path.substr(path, path.length - 1)
|
28 | } else if (!hasSlash && needsSlash) {
|
29 | return path + '/'
|
30 | } else {
|
31 | return path
|
32 | }
|
33 | }
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 | var homepagePath = packageJson.homepage
|
41 | var homepagePathname = homepagePath ? url.parse(homepagePath).pathname : '/'
|
42 |
|
43 |
|
44 | var publicPath = ensureSlash(homepagePathname, true)
|
45 |
|
46 |
|
47 |
|
48 | var publicUrl = ensureSlash(homepagePathname, false)
|
49 |
|
50 | const env = lincConfig.build_env || {}
|
51 | const defineEnv = {}
|
52 | Object.keys(env).forEach(key => (defineEnv[key] = JSON.stringify(env[key])))
|
53 | defineEnv['process.env.NODE_ENV'] = JSON.stringify('production')
|
54 | const definePlugin = new webpack.DefinePlugin(defineEnv)
|
55 |
|
56 | const createPlugin = options => {
|
57 | let Plugin = require(path.resolve(MODULES_DIR, options.import))
|
58 | if (options.exportName) {
|
59 | Plugin = Plugin[options.exportName]
|
60 | }
|
61 | return new Plugin(options.options)
|
62 | }
|
63 |
|
64 | module.exports = {
|
65 | LINC_DIR,
|
66 | PROJECT_DIR,
|
67 | packageJson,
|
68 | lincConfig,
|
69 | srcDir,
|
70 | deps,
|
71 | definePlugin,
|
72 | publicPath,
|
73 | createPlugin
|
74 | }
|