Webpack을 사용하여 프로젝트에서 여러 파일 항목 및 출력을 설정하는 방법은 무엇입니까?
Webpack을 사용하여 프로젝트에서 여러 파일 입력 / 출력을 설정하는 방법은 무엇입니까?
나는 http://webpack.github.io/docs/tutorials/getting-started/ 성공 컴파일을 따릅니다 .
예배 규칙서
app
webpack.config.js
./assets
././javascripts/Administrator/Article/Create/Base.js
././javascripts/Administrator/Article/Edit/Base.js
././javascripts/Account/Index/Base.js
././javascripts/Contact/Index/Base.js
...
이렇게 출력하는 방법?
././javascripts/Administrator/Article/Create/bundle.js
././javascripts/Administrator/Article/Edit/bundle.js
././javascripts/Account/Index/bundle.js
././javascripts/Contact/Index/bundle.js
webpack.config.js
module.exports = {
entry: {
'AdministratorArticleCreate':['./assets/javascripts/Administrator/Article/Create/Base.js']
},
output: {
path:
}
// if only one file
// entry: "./assets/javascripts/Administrator/Article/Create/Base.js",
// output: {
// // path: __dirname,
// path: "./assets/javascripts/Administrator/Article/Create/",
// filename: "bundle.js"
// }
};
많은 진입 점에서 배열을 entry
속성 값으로 사용 합니다.
entry: {
app: ['./app/main.js', '.lib/index.js'],
vendors: ['react']
}
app
그리고 vendors
당신이 필요로하는 당신이 많은 파일 경로로이 넣을 수 있도록 배열입니다.
출력 케이스의 경우 :
output: {
path: staticPath,
filename: '[name].js'
}
은 [name]
에서 가져온 것입니다 entry
우리가 만약 그렇다면, 속성 app
및 vendors
속성으로, 우리는이 개 출력 파일을 가지고 - app.js
와 vendors.js
.
여러 디렉토리로 출력하려는 경우 경로를 항목 이름으로 사용할 수 있습니다. 예를 들어이 디렉토리 구조를 원하는 경우 :
apps
├── dir1
│ └── js
│ ├── main.js [entry 1]
│ └── bundle.js [output 1]
└── dir2
├── index.js [entry 2]
└── foo.js [output 2]
그런 다음 module.exports에서 이것을 시도하십시오.
{
entry: {
'dir1/js/bundle': path.resolve(__dirname, '/apps/dir1/js/main.js'),
'dir2/foo' : path.resolve(__dirname, '/apps/dir2/index.js')
},
output: {
path: path.resolve(__dirname, '/apps'),
filename: '[name].js'
},
...
}
나를 위해 실제로 해결 한 것은 다음과 같습니다.
entry: {
app : __dirname + "/app/views/app/app.js",
admin : __dirname + "/app/views/admin/admin.js"
}
output: {
path: __dirname + "/public",
filename: "[name].js"
},
당신이로 출력 파일을 얻으려면 foo.css
과 bar.js
같은 시간에? 위의 답변은 이것을 처리 할 수없는 것 같습니다.
건전한 방법은 다중 컴파일러 를 사용하는 것입니다 . 하나의 입력 파일 하나의 구성 개체 하나의 출력 파일. 이 답변에서 .
이 webpack 플러그인 web-webpack-plugin 은 샘플 방식으로 해결할 수 있습니다.
AutoWebPlugin
디렉토리에서 모든 페이지 항목을 찾은 다음 WebPlugin
모든 페이지에 대해 html 파일을 출력하도록 자동 구성하면 아래와 같이 사용할 수 있습니다.
웹팩 구성
module.exports = {
plugins: [
new AutoWebPlugin(
// the directory hold all pages
'./src/',
{
// the template file path used by all pages
template: './src/template.html',
// javascript main file for current page,if it is null will use index.js in current page directory as main file
entity: null,
// extract common chunk for all pages and then put it into a file named common,if it is null then not do extract action
// achieve by CommonsChunkPlugin
commonsChunk: 'common',
// pre append to all page's entry
preEntrys:['./path/to/file1.js'],
// post append to all page's entry
postEntrys:['./path/to/file2.js'],
}),
]
};
src 디렉토리
── src
│ ├── home
│ │ └── index.js
│ ├── ie_polyfill.js
│ ├── login
│ │ └── index.js
│ ├── polyfill.js
│ ├── signup
│ │ └── index.js
│ └── template.html
출력 디렉토리
├── dist
│ ├── common.js
│ ├── home.html
│ ├── home.js
│ ├── ie_polyfill.js
│ ├── login.html
│ ├── login.js
│ ├── polyfill.js
│ ├── signup.html
│ └── signup.js
AutoWebPlugin
find all page home login signup
directory in ./src/
,for this three page home login signup
will use index.js
as main file and output three html file home.html login.html signup.html`
see doc:auto detect html entry
You can detect multiple entries and generate separate output files by using glob sync patterns.
Put this into your webpack.config.js
(without the ...
)
const glob = require("glob");
...
module.exports = (env, options) => ({
...
entry: glob.sync("./javascripts/**/*.js").reduce((acc, item) => {
const path = item.split("/");
path.pop();
const name = path.join('/');
acc[name] = item;
return acc;
}, {}),
output: {
filename: "[name]/bundle.js",
path: path.resolve(__dirname, "")
},
...
});
This "should" give you the desired output.
This question is 2 years old so I think the author has almost certainly moved on from this issue, but to anyone landing here more recently I had a really similar need and was able to write my own plugin to allow for dynamic output paths/names from known and/or unknown entry points.
My problem and thought process for the solution can be found here.
And the Node package itself here.
For my use case I actually needed to use different templates based on environment. To achieve this I passed in the NODE_ENV variable
module.exports = (env, argv) => {
const ENVIRONMENT = env.NODE_ENV;
let INDEX_HTML = 'index.html';
if (ENVIRONMENT === 'staging') {
INDEX_HTML = 'index-stg.html';
}
Then:
if (NODE_ENV === 'staging') {
INDEX_HTML = 'index-stg.html';
}
In the output:
output: {
path: process.cwd() + '/build',
filename: `[name].js`,
chunkFilename: `[${HASH_MODE}].[name].js`
},
plugins:
new HtmlWebpackPlugin({
inject: true,
template: `app/${INDEX_HTML}`,
}),
'Program Tip' 카테고리의 다른 글
Python / psycopg2 WHERE IN 문 (0) | 2020.12.15 |
---|---|
AWS Lambda에서 Socket.io를 사용할 수 있습니까? (0) | 2020.12.15 |
mp3 파일을 병합하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.14 |
Ruby에서 블록과 블록의 차이점 (0) | 2020.12.14 |
UIImage의 픽셀 색상 가져 오기 (0) | 2020.12.14 |